Full Code of alnitak/flutter_opengl for AI

master 19a0f50af319 cached
580 files
2.5 MB
674.4k tokens
1496 symbols
1 requests
Download .txt
Showing preview only (2,694K chars total). Download the full file or copy to clipboard to get everything.
Repository: alnitak/flutter_opengl
Branch: master
Commit: 19a0f50af319
Files: 580
Total size: 2.5 MB

Directory structure:
gitextract__ltgg91e/

├── .gitignore
├── .metadata
├── .vscode/
│   ├── c_cpp_properties.json
│   ├── extensions.json
│   ├── launch.json
│   ├── settings.json
│   └── tasks.json
├── CHANGELOG.md
├── LICENSE
├── README.md
├── SCRIPTS/
│   └── setupOpenCV-android.sh
├── analysis_options.yaml
├── android/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       ├── gradle-wrapper.jar
│   │       └── gradle-wrapper.properties
│   ├── gradlew
│   ├── gradlew.bat
│   ├── proguard-rules.pro
│   ├── settings.gradle
│   └── src/
│       ├── glm/
│       │   ├── CMakeLists.txt
│       │   ├── common.hpp
│       │   ├── detail/
│       │   │   ├── _features.hpp
│       │   │   ├── _fixes.hpp
│       │   │   ├── _noise.hpp
│       │   │   ├── _swizzle.hpp
│       │   │   ├── _swizzle_func.hpp
│       │   │   ├── _vectorize.hpp
│       │   │   ├── compute_common.hpp
│       │   │   ├── compute_vector_relational.hpp
│       │   │   ├── func_common.inl
│       │   │   ├── func_common_simd.inl
│       │   │   ├── func_exponential.inl
│       │   │   ├── func_exponential_simd.inl
│       │   │   ├── func_geometric.inl
│       │   │   ├── func_geometric_simd.inl
│       │   │   ├── func_integer.inl
│       │   │   ├── func_integer_simd.inl
│       │   │   ├── func_matrix.inl
│       │   │   ├── func_matrix_simd.inl
│       │   │   ├── func_packing.inl
│       │   │   ├── func_packing_simd.inl
│       │   │   ├── func_trigonometric.inl
│       │   │   ├── func_trigonometric_simd.inl
│       │   │   ├── func_vector_relational.inl
│       │   │   ├── func_vector_relational_simd.inl
│       │   │   ├── glm.cpp
│       │   │   ├── qualifier.hpp
│       │   │   ├── setup.hpp
│       │   │   ├── type_float.hpp
│       │   │   ├── type_half.hpp
│       │   │   ├── type_half.inl
│       │   │   ├── type_mat2x2.hpp
│       │   │   ├── type_mat2x2.inl
│       │   │   ├── type_mat2x3.hpp
│       │   │   ├── type_mat2x3.inl
│       │   │   ├── type_mat2x4.hpp
│       │   │   ├── type_mat2x4.inl
│       │   │   ├── type_mat3x2.hpp
│       │   │   ├── type_mat3x2.inl
│       │   │   ├── type_mat3x3.hpp
│       │   │   ├── type_mat3x3.inl
│       │   │   ├── type_mat3x4.hpp
│       │   │   ├── type_mat3x4.inl
│       │   │   ├── type_mat4x2.hpp
│       │   │   ├── type_mat4x2.inl
│       │   │   ├── type_mat4x3.hpp
│       │   │   ├── type_mat4x3.inl
│       │   │   ├── type_mat4x4.hpp
│       │   │   ├── type_mat4x4.inl
│       │   │   ├── type_mat4x4_simd.inl
│       │   │   ├── type_quat.hpp
│       │   │   ├── type_quat.inl
│       │   │   ├── type_quat_simd.inl
│       │   │   ├── type_vec1.hpp
│       │   │   ├── type_vec1.inl
│       │   │   ├── type_vec2.hpp
│       │   │   ├── type_vec2.inl
│       │   │   ├── type_vec3.hpp
│       │   │   ├── type_vec3.inl
│       │   │   ├── type_vec4.hpp
│       │   │   ├── type_vec4.inl
│       │   │   └── type_vec4_simd.inl
│       │   ├── exponential.hpp
│       │   ├── ext/
│       │   │   ├── matrix_clip_space.hpp
│       │   │   ├── matrix_clip_space.inl
│       │   │   ├── matrix_common.hpp
│       │   │   ├── matrix_common.inl
│       │   │   ├── matrix_double2x2.hpp
│       │   │   ├── matrix_double2x2_precision.hpp
│       │   │   ├── matrix_double2x3.hpp
│       │   │   ├── matrix_double2x3_precision.hpp
│       │   │   ├── matrix_double2x4.hpp
│       │   │   ├── matrix_double2x4_precision.hpp
│       │   │   ├── matrix_double3x2.hpp
│       │   │   ├── matrix_double3x2_precision.hpp
│       │   │   ├── matrix_double3x3.hpp
│       │   │   ├── matrix_double3x3_precision.hpp
│       │   │   ├── matrix_double3x4.hpp
│       │   │   ├── matrix_double3x4_precision.hpp
│       │   │   ├── matrix_double4x2.hpp
│       │   │   ├── matrix_double4x2_precision.hpp
│       │   │   ├── matrix_double4x3.hpp
│       │   │   ├── matrix_double4x3_precision.hpp
│       │   │   ├── matrix_double4x4.hpp
│       │   │   ├── matrix_double4x4_precision.hpp
│       │   │   ├── matrix_float2x2.hpp
│       │   │   ├── matrix_float2x2_precision.hpp
│       │   │   ├── matrix_float2x3.hpp
│       │   │   ├── matrix_float2x3_precision.hpp
│       │   │   ├── matrix_float2x4.hpp
│       │   │   ├── matrix_float2x4_precision.hpp
│       │   │   ├── matrix_float3x2.hpp
│       │   │   ├── matrix_float3x2_precision.hpp
│       │   │   ├── matrix_float3x3.hpp
│       │   │   ├── matrix_float3x3_precision.hpp
│       │   │   ├── matrix_float3x4.hpp
│       │   │   ├── matrix_float3x4_precision.hpp
│       │   │   ├── matrix_float4x2.hpp
│       │   │   ├── matrix_float4x2_precision.hpp
│       │   │   ├── matrix_float4x3.hpp
│       │   │   ├── matrix_float4x3_precision.hpp
│       │   │   ├── matrix_float4x4.hpp
│       │   │   ├── matrix_float4x4_precision.hpp
│       │   │   ├── matrix_int2x2.hpp
│       │   │   ├── matrix_int2x2_sized.hpp
│       │   │   ├── matrix_int2x3.hpp
│       │   │   ├── matrix_int2x3_sized.hpp
│       │   │   ├── matrix_int2x4.hpp
│       │   │   ├── matrix_int2x4_sized.hpp
│       │   │   ├── matrix_int3x2.hpp
│       │   │   ├── matrix_int3x2_sized.hpp
│       │   │   ├── matrix_int3x3.hpp
│       │   │   ├── matrix_int3x3_sized.hpp
│       │   │   ├── matrix_int3x4.hpp
│       │   │   ├── matrix_int3x4_sized.hpp
│       │   │   ├── matrix_int4x2.hpp
│       │   │   ├── matrix_int4x2_sized.hpp
│       │   │   ├── matrix_int4x3.hpp
│       │   │   ├── matrix_int4x3_sized.hpp
│       │   │   ├── matrix_int4x4.hpp
│       │   │   ├── matrix_int4x4_sized.hpp
│       │   │   ├── matrix_projection.hpp
│       │   │   ├── matrix_projection.inl
│       │   │   ├── matrix_relational.hpp
│       │   │   ├── matrix_relational.inl
│       │   │   ├── matrix_transform.hpp
│       │   │   ├── matrix_transform.inl
│       │   │   ├── matrix_uint2x2.hpp
│       │   │   ├── matrix_uint2x2_sized.hpp
│       │   │   ├── matrix_uint2x3.hpp
│       │   │   ├── matrix_uint2x3_sized.hpp
│       │   │   ├── matrix_uint2x4.hpp
│       │   │   ├── matrix_uint2x4_sized.hpp
│       │   │   ├── matrix_uint3x2.hpp
│       │   │   ├── matrix_uint3x2_sized.hpp
│       │   │   ├── matrix_uint3x3.hpp
│       │   │   ├── matrix_uint3x3_sized.hpp
│       │   │   ├── matrix_uint3x4.hpp
│       │   │   ├── matrix_uint3x4_sized.hpp
│       │   │   ├── matrix_uint4x2.hpp
│       │   │   ├── matrix_uint4x2_sized.hpp
│       │   │   ├── matrix_uint4x3.hpp
│       │   │   ├── matrix_uint4x3_sized.hpp
│       │   │   ├── matrix_uint4x4.hpp
│       │   │   ├── matrix_uint4x4_sized.hpp
│       │   │   ├── quaternion_common.hpp
│       │   │   ├── quaternion_common.inl
│       │   │   ├── quaternion_common_simd.inl
│       │   │   ├── quaternion_double.hpp
│       │   │   ├── quaternion_double_precision.hpp
│       │   │   ├── quaternion_exponential.hpp
│       │   │   ├── quaternion_exponential.inl
│       │   │   ├── quaternion_float.hpp
│       │   │   ├── quaternion_float_precision.hpp
│       │   │   ├── quaternion_geometric.hpp
│       │   │   ├── quaternion_geometric.inl
│       │   │   ├── quaternion_relational.hpp
│       │   │   ├── quaternion_relational.inl
│       │   │   ├── quaternion_transform.hpp
│       │   │   ├── quaternion_transform.inl
│       │   │   ├── quaternion_trigonometric.hpp
│       │   │   ├── quaternion_trigonometric.inl
│       │   │   ├── scalar_common.hpp
│       │   │   ├── scalar_common.inl
│       │   │   ├── scalar_constants.hpp
│       │   │   ├── scalar_constants.inl
│       │   │   ├── scalar_int_sized.hpp
│       │   │   ├── scalar_integer.hpp
│       │   │   ├── scalar_integer.inl
│       │   │   ├── scalar_packing.hpp
│       │   │   ├── scalar_packing.inl
│       │   │   ├── scalar_relational.hpp
│       │   │   ├── scalar_relational.inl
│       │   │   ├── scalar_uint_sized.hpp
│       │   │   ├── scalar_ulp.hpp
│       │   │   ├── scalar_ulp.inl
│       │   │   ├── vector_bool1.hpp
│       │   │   ├── vector_bool1_precision.hpp
│       │   │   ├── vector_bool2.hpp
│       │   │   ├── vector_bool2_precision.hpp
│       │   │   ├── vector_bool3.hpp
│       │   │   ├── vector_bool3_precision.hpp
│       │   │   ├── vector_bool4.hpp
│       │   │   ├── vector_bool4_precision.hpp
│       │   │   ├── vector_common.hpp
│       │   │   ├── vector_common.inl
│       │   │   ├── vector_double1.hpp
│       │   │   ├── vector_double1_precision.hpp
│       │   │   ├── vector_double2.hpp
│       │   │   ├── vector_double2_precision.hpp
│       │   │   ├── vector_double3.hpp
│       │   │   ├── vector_double3_precision.hpp
│       │   │   ├── vector_double4.hpp
│       │   │   ├── vector_double4_precision.hpp
│       │   │   ├── vector_float1.hpp
│       │   │   ├── vector_float1_precision.hpp
│       │   │   ├── vector_float2.hpp
│       │   │   ├── vector_float2_precision.hpp
│       │   │   ├── vector_float3.hpp
│       │   │   ├── vector_float3_precision.hpp
│       │   │   ├── vector_float4.hpp
│       │   │   ├── vector_float4_precision.hpp
│       │   │   ├── vector_int1.hpp
│       │   │   ├── vector_int1_sized.hpp
│       │   │   ├── vector_int2.hpp
│       │   │   ├── vector_int2_sized.hpp
│       │   │   ├── vector_int3.hpp
│       │   │   ├── vector_int3_sized.hpp
│       │   │   ├── vector_int4.hpp
│       │   │   ├── vector_int4_sized.hpp
│       │   │   ├── vector_integer.hpp
│       │   │   ├── vector_integer.inl
│       │   │   ├── vector_packing.hpp
│       │   │   ├── vector_packing.inl
│       │   │   ├── vector_relational.hpp
│       │   │   ├── vector_relational.inl
│       │   │   ├── vector_uint1.hpp
│       │   │   ├── vector_uint1_sized.hpp
│       │   │   ├── vector_uint2.hpp
│       │   │   ├── vector_uint2_sized.hpp
│       │   │   ├── vector_uint3.hpp
│       │   │   ├── vector_uint3_sized.hpp
│       │   │   ├── vector_uint4.hpp
│       │   │   ├── vector_uint4_sized.hpp
│       │   │   ├── vector_ulp.hpp
│       │   │   └── vector_ulp.inl
│       │   ├── ext.hpp
│       │   ├── fwd.hpp
│       │   ├── geometric.hpp
│       │   ├── glm.hpp
│       │   ├── gtc/
│       │   │   ├── bitfield.hpp
│       │   │   ├── bitfield.inl
│       │   │   ├── color_space.hpp
│       │   │   ├── color_space.inl
│       │   │   ├── constants.hpp
│       │   │   ├── constants.inl
│       │   │   ├── epsilon.hpp
│       │   │   ├── epsilon.inl
│       │   │   ├── integer.hpp
│       │   │   ├── integer.inl
│       │   │   ├── matrix_access.hpp
│       │   │   ├── matrix_access.inl
│       │   │   ├── matrix_integer.hpp
│       │   │   ├── matrix_inverse.hpp
│       │   │   ├── matrix_inverse.inl
│       │   │   ├── matrix_transform.hpp
│       │   │   ├── matrix_transform.inl
│       │   │   ├── noise.hpp
│       │   │   ├── noise.inl
│       │   │   ├── packing.hpp
│       │   │   ├── packing.inl
│       │   │   ├── quaternion.hpp
│       │   │   ├── quaternion.inl
│       │   │   ├── quaternion_simd.inl
│       │   │   ├── random.hpp
│       │   │   ├── random.inl
│       │   │   ├── reciprocal.hpp
│       │   │   ├── reciprocal.inl
│       │   │   ├── round.hpp
│       │   │   ├── round.inl
│       │   │   ├── type_aligned.hpp
│       │   │   ├── type_precision.hpp
│       │   │   ├── type_precision.inl
│       │   │   ├── type_ptr.hpp
│       │   │   ├── type_ptr.inl
│       │   │   ├── ulp.hpp
│       │   │   ├── ulp.inl
│       │   │   └── vec1.hpp
│       │   ├── gtx/
│       │   │   ├── associated_min_max.hpp
│       │   │   ├── associated_min_max.inl
│       │   │   ├── bit.hpp
│       │   │   ├── bit.inl
│       │   │   ├── closest_point.hpp
│       │   │   ├── closest_point.inl
│       │   │   ├── color_encoding.hpp
│       │   │   ├── color_encoding.inl
│       │   │   ├── color_space.hpp
│       │   │   ├── color_space.inl
│       │   │   ├── color_space_YCoCg.hpp
│       │   │   ├── color_space_YCoCg.inl
│       │   │   ├── common.hpp
│       │   │   ├── common.inl
│       │   │   ├── compatibility.hpp
│       │   │   ├── compatibility.inl
│       │   │   ├── component_wise.hpp
│       │   │   ├── component_wise.inl
│       │   │   ├── dual_quaternion.hpp
│       │   │   ├── dual_quaternion.inl
│       │   │   ├── easing.hpp
│       │   │   ├── easing.inl
│       │   │   ├── euler_angles.hpp
│       │   │   ├── euler_angles.inl
│       │   │   ├── extend.hpp
│       │   │   ├── extend.inl
│       │   │   ├── extended_min_max.hpp
│       │   │   ├── extended_min_max.inl
│       │   │   ├── exterior_product.hpp
│       │   │   ├── exterior_product.inl
│       │   │   ├── fast_exponential.hpp
│       │   │   ├── fast_exponential.inl
│       │   │   ├── fast_square_root.hpp
│       │   │   ├── fast_square_root.inl
│       │   │   ├── fast_trigonometry.hpp
│       │   │   ├── fast_trigonometry.inl
│       │   │   ├── float_notmalize.inl
│       │   │   ├── functions.hpp
│       │   │   ├── functions.inl
│       │   │   ├── gradient_paint.hpp
│       │   │   ├── gradient_paint.inl
│       │   │   ├── handed_coordinate_space.hpp
│       │   │   ├── handed_coordinate_space.inl
│       │   │   ├── hash.hpp
│       │   │   ├── hash.inl
│       │   │   ├── integer.hpp
│       │   │   ├── integer.inl
│       │   │   ├── intersect.hpp
│       │   │   ├── intersect.inl
│       │   │   ├── io.hpp
│       │   │   ├── io.inl
│       │   │   ├── log_base.hpp
│       │   │   ├── log_base.inl
│       │   │   ├── matrix_cross_product.hpp
│       │   │   ├── matrix_cross_product.inl
│       │   │   ├── matrix_decompose.hpp
│       │   │   ├── matrix_decompose.inl
│       │   │   ├── matrix_factorisation.hpp
│       │   │   ├── matrix_factorisation.inl
│       │   │   ├── matrix_interpolation.hpp
│       │   │   ├── matrix_interpolation.inl
│       │   │   ├── matrix_major_storage.hpp
│       │   │   ├── matrix_major_storage.inl
│       │   │   ├── matrix_operation.hpp
│       │   │   ├── matrix_operation.inl
│       │   │   ├── matrix_query.hpp
│       │   │   ├── matrix_query.inl
│       │   │   ├── matrix_transform_2d.hpp
│       │   │   ├── matrix_transform_2d.inl
│       │   │   ├── mixed_product.hpp
│       │   │   ├── mixed_product.inl
│       │   │   ├── norm.hpp
│       │   │   ├── norm.inl
│       │   │   ├── normal.hpp
│       │   │   ├── normal.inl
│       │   │   ├── normalize_dot.hpp
│       │   │   ├── normalize_dot.inl
│       │   │   ├── number_precision.hpp
│       │   │   ├── number_precision.inl
│       │   │   ├── optimum_pow.hpp
│       │   │   ├── optimum_pow.inl
│       │   │   ├── orthonormalize.hpp
│       │   │   ├── orthonormalize.inl
│       │   │   ├── perpendicular.hpp
│       │   │   ├── perpendicular.inl
│       │   │   ├── polar_coordinates.hpp
│       │   │   ├── polar_coordinates.inl
│       │   │   ├── projection.hpp
│       │   │   ├── projection.inl
│       │   │   ├── quaternion.hpp
│       │   │   ├── quaternion.inl
│       │   │   ├── range.hpp
│       │   │   ├── raw_data.hpp
│       │   │   ├── raw_data.inl
│       │   │   ├── rotate_normalized_axis.hpp
│       │   │   ├── rotate_normalized_axis.inl
│       │   │   ├── rotate_vector.hpp
│       │   │   ├── rotate_vector.inl
│       │   │   ├── scalar_multiplication.hpp
│       │   │   ├── scalar_relational.hpp
│       │   │   ├── scalar_relational.inl
│       │   │   ├── spline.hpp
│       │   │   ├── spline.inl
│       │   │   ├── std_based_type.hpp
│       │   │   ├── std_based_type.inl
│       │   │   ├── string_cast.hpp
│       │   │   ├── string_cast.inl
│       │   │   ├── texture.hpp
│       │   │   ├── texture.inl
│       │   │   ├── transform.hpp
│       │   │   ├── transform.inl
│       │   │   ├── transform2.hpp
│       │   │   ├── transform2.inl
│       │   │   ├── type_aligned.hpp
│       │   │   ├── type_aligned.inl
│       │   │   ├── type_trait.hpp
│       │   │   ├── type_trait.inl
│       │   │   ├── vec_swizzle.hpp
│       │   │   ├── vector_angle.hpp
│       │   │   ├── vector_angle.inl
│       │   │   ├── vector_query.hpp
│       │   │   ├── vector_query.inl
│       │   │   ├── wrap.hpp
│       │   │   └── wrap.inl
│       │   ├── integer.hpp
│       │   ├── mat2x2.hpp
│       │   ├── mat2x3.hpp
│       │   ├── mat2x4.hpp
│       │   ├── mat3x2.hpp
│       │   ├── mat3x3.hpp
│       │   ├── mat3x4.hpp
│       │   ├── mat4x2.hpp
│       │   ├── mat4x3.hpp
│       │   ├── mat4x4.hpp
│       │   ├── matrix.hpp
│       │   ├── packing.hpp
│       │   ├── simd/
│       │   │   ├── common.h
│       │   │   ├── exponential.h
│       │   │   ├── geometric.h
│       │   │   ├── integer.h
│       │   │   ├── matrix.h
│       │   │   ├── neon.h
│       │   │   ├── packing.h
│       │   │   ├── platform.h
│       │   │   ├── trigonometric.h
│       │   │   └── vector_relational.h
│       │   ├── trigonometric.hpp
│       │   ├── vec2.hpp
│       │   ├── vec3.hpp
│       │   ├── vec4.hpp
│       │   └── vector_relational.hpp
│       └── main/
│           ├── AndroidManifest.xml
│           └── java/
│               └── com/
│                   └── example/
│                       └── flutter_opengl/
│                           └── FlutterOpenglPlugin.java
├── example/
│   ├── .gitignore
│   ├── README.md
│   ├── analysis_options.yaml
│   ├── android/
│   │   ├── .gitignore
│   │   ├── app/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       ├── debug/
│   │   │       │   └── AndroidManifest.xml
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   ├── java/
│   │   │       │   │   └── com/
│   │   │       │   │       └── example/
│   │   │       │   │           └── flutter_opengl_example/
│   │   │       │   │               └── MainActivity.java
│   │   │       │   ├── kotlin/
│   │   │       │   │   └── com/
│   │   │       │   │       └── example/
│   │   │       │   │           └── flutter_opengl_example/
│   │   │       │   │               └── MainActivity.kt
│   │   │       │   └── res/
│   │   │       │       ├── drawable/
│   │   │       │       │   └── launch_background.xml
│   │   │       │       ├── drawable-v21/
│   │   │       │       │   └── launch_background.xml
│   │   │       │       ├── values/
│   │   │       │       │   └── styles.xml
│   │   │       │       └── values-night/
│   │   │       │           └── styles.xml
│   │   │       └── profile/
│   │   │           └── AndroidManifest.xml
│   │   ├── build.gradle
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradle.properties
│   │   └── settings.gradle
│   ├── ios/
│   │   ├── .gitignore
│   │   ├── Flutter/
│   │   │   ├── AppFrameworkInfo.plist
│   │   │   ├── Debug.xcconfig
│   │   │   └── Release.xcconfig
│   │   ├── Runner/
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── LaunchImage.imageset/
│   │   │   │       ├── Contents.json
│   │   │   │       └── README.md
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── Runner-Bridging-Header.h
│   │   ├── Runner.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace/
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcshareddata/
│   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── Runner.xcscheme
│   │   └── Runner.xcworkspace/
│   │       ├── contents.xcworkspacedata
│   │       └── xcshareddata/
│   │           ├── IDEWorkspaceChecks.plist
│   │           └── WorkspaceSettings.xcsettings
│   ├── lib/
│   │   ├── controls/
│   │   │   ├── ShaderButtons.dart
│   │   │   ├── controls.dart
│   │   │   ├── texture_chooser.dart
│   │   │   └── texture_sizes.dart
│   │   ├── edit_shader.dart
│   │   ├── main.dart
│   │   ├── main_in_deep.dart
│   │   ├── shader_widget.dart
│   │   ├── shadertoy.dart
│   │   ├── states.dart
│   │   └── test_widget.dart
│   ├── linux/
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── flutter/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── generated_plugin_registrant.cc
│   │   │   ├── generated_plugin_registrant.h
│   │   │   └── generated_plugins.cmake
│   │   ├── main.cc
│   │   ├── my_application.cc
│   │   └── my_application.h
│   ├── macos/
│   │   ├── .gitignore
│   │   ├── Flutter/
│   │   │   ├── Flutter-Debug.xcconfig
│   │   │   ├── Flutter-Release.xcconfig
│   │   │   └── GeneratedPluginRegistrant.swift
│   │   ├── Runner/
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Base.lproj/
│   │   │   │   └── MainMenu.xib
│   │   │   ├── Configs/
│   │   │   │   ├── AppInfo.xcconfig
│   │   │   │   ├── Debug.xcconfig
│   │   │   │   ├── Release.xcconfig
│   │   │   │   └── Warnings.xcconfig
│   │   │   ├── DebugProfile.entitlements
│   │   │   ├── Info.plist
│   │   │   ├── MainFlutterWindow.swift
│   │   │   └── Release.entitlements
│   │   ├── Runner.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace/
│   │   │   │   └── xcshareddata/
│   │   │   │       └── IDEWorkspaceChecks.plist
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── Runner.xcscheme
│   │   └── Runner.xcworkspace/
│   │       ├── contents.xcworkspacedata
│   │       └── xcshareddata/
│   │           └── IDEWorkspaceChecks.plist
│   ├── pubspec.yaml
│   ├── test/
│   │   └── widget_test.dart
│   └── windows/
│       ├── .gitignore
│       ├── CMakeLists.txt
│       ├── flutter/
│       │   ├── CMakeLists.txt
│       │   ├── generated_plugin_registrant.cc
│       │   ├── generated_plugin_registrant.h
│       │   └── generated_plugins.cmake
│       └── runner/
│           ├── CMakeLists.txt
│           ├── Runner.rc
│           ├── flutter_window.cpp
│           ├── flutter_window.h
│           ├── main.cpp
│           ├── resource.h
│           ├── runner.exe.manifest
│           ├── utils.cpp
│           ├── utils.h
│           ├── win32_window.cpp
│           └── win32_window.h
├── lib/
│   ├── flutter_opengl.dart
│   └── src/
│       ├── flutter_opengl.dart
│       ├── flutter_opengl_ffi.dart
│       ├── flutter_opengl_method_channel.dart
│       ├── flutter_opengl_platform_interface.dart
│       ├── ogl_utils.dart
│       ├── opengl_controller.dart
│       └── opengl_texture.dart
├── linux/
│   ├── CMakeLists.txt
│   ├── fl_my_texture_gl.cc
│   ├── flutter_opengl_plugin.cc
│   ├── include/
│   │   ├── fl_my_texture_gl.h
│   │   ├── flutter_opengl/
│   │   │   └── flutter_opengl_plugin.h
│   │   └── test.h
│   └── test.cpp
├── pubspec.yaml
├── src/
│   ├── Renderer.cpp
│   ├── Renderer.h
│   ├── Sampler2D.cpp
│   ├── Sampler2D.h
│   ├── Shader.cpp
│   ├── Shader.h
│   ├── common.h
│   ├── ffi.cpp
│   ├── ffi.h
│   ├── ndk/
│   │   └── ndk.cpp
│   ├── opencv_capture.cpp
│   ├── opencv_capture.h
│   ├── uniformQueue.cpp
│   └── uniformQueue.h
├── test/
│   ├── flutter_opengl_method_channel_test.dart
│   └── flutter_opengl_test.dart
└── windows/
    ├── .gitignore
    ├── CMakeLists.txt
    ├── fl_my_texture_gl.cc
    ├── fl_my_texture_gl.h
    ├── flutter_opengl_plugin.cpp
    ├── flutter_opengl_plugin.h
    ├── flutter_opengl_plugin_c_api.cpp
    └── include/
        └── flutter_opengl/
            └── flutter_opengl_plugin_c_api.h

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/

# Flutter/Dart/Pub related
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
/pubspec.lock
**/doc/api/
.dart_tool/
.packages
build/

android/src/opencv
WORK/
BUILD_LIBS/
SCRIPTS/
!SCRIPTS/setupOpenCV-android.sh

#libraries to download
windows/glm/
windows/Native_SDK/
windows/glew


================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled.

version:
  revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
  channel: stable

project_type: plugin

# Tracks metadata for the flutter migrate command
migration:
  platforms:
    - platform: root
      create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
      base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
    - platform: android
      create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
      base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
    - platform: ios
      create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
      base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
    - platform: linux
      create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
      base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
    - platform: macos
      create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
      base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
    - platform: windows
      create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57
      base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57

  # User provided section

  # List of Local paths (relative to this file) that should be
  # ignored by the migrate tool.
  #
  # Files that are not part of the templates will be ignored by default.
  unmanaged_files:
    - 'lib/main.dart'
    - 'ios/Runner.xcodeproj/project.pbxproj'


================================================
FILE: .vscode/c_cpp_properties.json
================================================
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/linux/include",
                "${workspaceFolder}/linux/include/flutter_opengl",
                "${workspaceFolder}/src"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "linux-clang-x64",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json",
            "configurationProvider": "ms-vscode.cmake-tools"
        },
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.19041.0",
            "compilerPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-msvc-x64",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}

================================================
FILE: .vscode/extensions.json
================================================
{
    "recommendations": [
        "ms-vscode.cpptools",
        "ms-vscode.cpptools-extension-pack",
        "Dart-Code.flutter"
    ]
}

================================================
FILE: .vscode/launch.json
================================================
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
            "name": "example (debug mode)",
            "cwd": "example",
            "request": "launch",
            "type": "dart"
        },
        {
            "name": "example (profile mode)",
            "cwd": "example",
            "request": "launch",
            "type": "dart",
            "flutterMode": "profile"
        },
        {
            "name": "example (release mode)",
            "cwd": "example",
            "request": "launch",
            "type": "dart",
            "flutterMode": "release"
        },
        {
            "name": "Debug native Windows",
            "preLaunchTask": "compile windows debug",
            "type": "cppvsdbg",
            "request": "launch",
            "args": [],
            // "environment": [{"name": "MESA_EGL_VERSION_OVERRIDE", "value": "3.3FC"}],
            "program": "${workspaceFolder}/example/build/windows/runner/Debug/flutter_opengl_example.exe",
            "cwd": "${workspaceFolder}"
        },
        {
            "name": "Debug native Windows VERBOSE",
            "preLaunchTask": "compile windows debug verbose",
            "type": "cppvsdbg",
            "request": "launch",
            "args": [],
            // "environment": [{"name": "MESA_EGL_VERSION_OVERRIDE", "value": "3.3FC"}],
            "program": "${workspaceFolder}/example/build/windows/runner/Debug/flutter_opengl_example.exe",
            "cwd": "${workspaceFolder}"
        },
        {
            "name": "Debug native Linux",
            "preLaunchTask": "compile linux debug",
            "type": "cppdbg",
            "request": "launch",
            "args": [],
            // "environment": [{"name": "MESA_EGL_VERSION_OVERRIDE", "value": "3.3FC"}],
            "program": "${workspaceFolder}/example/build/linux/x64/debug/bundle/flutter_opengl_example",
            "cwd": "${workspaceFolder}"
        },
        {
            "name": "Debug native Linux VERBOSE",
            "preLaunchTask": "compile linux debug verbose",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/example/build/linux/x64/debug/bundle/flutter_opengl_example",
            "cwd": "${workspaceFolder}"
        }
    ]
}

================================================
FILE: .vscode/settings.json
================================================
{
    "cmake.sourceDirectory": "${workspaceFolder}/linux",
    "cmake.configureOnOpen": true,
    "files.associations": {
        "compare": "cpp",
        "functional": "cpp",
        "condition_variable": "cpp",
        "iostream": "cpp",
        "cstring": "cpp",
        "cstdint": "cpp",
        "sstream": "cpp",
        "array": "cpp",
        "atomic": "cpp",
        "bit": "cpp",
        "*.tcc": "cpp",
        "cctype": "cpp",
        "chrono": "cpp",
        "clocale": "cpp",
        "cmath": "cpp",
        "concepts": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "ctime": "cpp",
        "cwchar": "cpp",
        "cwctype": "cpp",
        "unordered_map": "cpp",
        "vector": "cpp",
        "exception": "cpp",
        "future": "cpp",
        "initializer_list": "cpp",
        "iosfwd": "cpp",
        "istream": "cpp",
        "limits": "cpp",
        "memory": "cpp",
        "mutex": "cpp",
        "new": "cpp",
        "numbers": "cpp",
        "ostream": "cpp",
        "ratio": "cpp",
        "semaphore": "cpp",
        "stdexcept": "cpp",
        "stop_token": "cpp",
        "streambuf": "cpp",
        "string": "cpp",
        "string_view": "cpp",
        "system_error": "cpp",
        "thread": "cpp",
        "tuple": "cpp",
        "type_traits": "cpp",
        "typeinfo": "cpp",
        "utility": "cpp",
        "any": "cpp",
        "hash_map": "cpp",
        "hash_set": "cpp",
        "bitset": "cpp",
        "cinttypes": "cpp",
        "codecvt": "cpp",
        "complex": "cpp",
        "csignal": "cpp",
        "cstdarg": "cpp",
        "cstddef": "cpp",
        "deque": "cpp",
        "forward_list": "cpp",
        "list": "cpp",
        "map": "cpp",
        "set": "cpp",
        "unordered_set": "cpp",
        "algorithm": "cpp",
        "iterator": "cpp",
        "memory_resource": "cpp",
        "numeric": "cpp",
        "optional": "cpp",
        "random": "cpp",
        "fstream": "cpp",
        "iomanip": "cpp",
        "cfenv": "cpp",
        "typeindex": "cpp",
        "valarray": "cpp",
        "variant": "cpp",
        "charconv": "cpp",
        "coroutine": "cpp",
        "resumable": "cpp",
        "format": "cpp",
        "ios": "cpp",
        "locale": "cpp",
        "xfacet": "cpp",
        "xhash": "cpp",
        "xiosbase": "cpp",
        "xlocale": "cpp",
        "xlocbuf": "cpp",
        "xlocinfo": "cpp",
        "xlocmes": "cpp",
        "xlocmon": "cpp",
        "xlocnum": "cpp",
        "xloctime": "cpp",
        "xmemory": "cpp",
        "xstddef": "cpp",
        "xstring": "cpp",
        "xtr1common": "cpp",
        "xtree": "cpp",
        "xutility": "cpp",
        "regex": "cpp",
        "shared_mutex": "cpp",
        "queue": "cpp",
        "ranges": "cpp",
        "span": "cpp"
    }
}

================================================
FILE: .vscode/tasks.json
================================================
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "compile linux debug verbose",
            "command": "cd ${workspaceFolder}/example && flutter build linux -t lib/main_in_deep.dart --debug --verbose",
            // "args": ["build", "linux", "--verbose"],
            "type": "shell"
        },
        {
            "label": "compile linux debug",
            "command": "cd ${workspaceFolder}/example; flutter build linux -t lib/main_in_deep.dart --debug",
            // "args": ["build", "linux"],
            "type": "shell"
        },
        {
            "label": "compile windows debug verbose",
            "command": "cd ${workspaceFolder}/example; flutter build windows -t lib/main_in_deep.dart --debug --verbose",
            // "args": ["build", "linux"],
            "type": "shell"
        },
        {
            "label": "compile windows debug",
            "command": "cd ${workspaceFolder}/example; flutter build windows -t lib/main_in_deep.dart --debug",
            // "args": ["build", "linux"],
            "type": "shell"
        },
    ]
}

================================================
FILE: CHANGELOG.md
================================================
## 0.9.0

Code rewritten. Support for Android, Linux and Windows

================================================
FILE: LICENSE
================================================
Copyright 2019 Marco Bavagnoli <marco.bavagnoli@gmail.com>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

================================================
FILE: README.md
================================================
# flutter_opengl

A Flutter OpenGL ES plugin using a Texture() widget. Supports Android, Linux and Windows. Many shaders from ShaderToy.com can be copy/pasted 

## Getting Started

| Android | Windows | Linux | iOS | MacOS | Web|
| ---- | ---- | ---- | ---- | ---- | ---- |
| ✅  | ✅ | ✅ | x | x | x|

![gif](https://github.com/alnitak/flutter_opengl/blob/master/images/flutter_opengl.gif?raw=true "Flutter OpenGL Demo")
![gif](https://github.com/alnitak/flutter_opengl/blob/master/images/flutter_OpenGL-video.gif?raw=true "Flutter OpenGL Demo")
![gif](https://github.com/alnitak/flutter_opengl/blob/master/images/flutter_OpenGL-textures.gif?raw=true "Flutter OpenGL Demo")

The main workflow of the plugin is:

- ask to native code with a MethodChannel for a texture ID
- use the texture ID in a Texture() widget
- set a vertex and a fragment sources
- start the renderer
- change shader sources on the fly

All functionalities, but the first call to the first method channel, use FFI calls.

The starting idea developing this plugin, was not just to use GLSL, but also take advantage of the wonderful [ShaderToy](https://www.shadertoy.com/) web site.

For now it's possible to copy/paste shaders from ShaderToy, but only those which have only one layer.

Be aware that on a real device, many shaders could be very slow because they are hungry of power and some others needs ES 3 and for now is not supported on Android (ie latest 3 shaders in the *lib/main_in_deep.dart* example).

***iResolution***, ***iTime***, ***iMouse***, ***iChannel[0-3]*** are supported, other uniforms can be added at run-time.

- ***iResolution*** is a vec3 uniform which represents the texture size
- ***iTime*** is a float which represents the time since the shader was created
- ***iMouse*** is a vec4 which the x and y values represent the coordinates where the mouse or the touch is grabbed hover the *Texture()* widget
- ***iChannel[0-3]*** Sampler2D uniform textures

### Simple example

```dart
SizedBox(
    width: 400,
    height: 300,
    child: FutureBuilder(
        /// The surface size identifies the real texture size and
        /// it is not related to the above SizedBox size
        future: OpenGLController().openglPlugin.createSurface(300, 200),
        builder: (_, snapshot) {
            if (snapshot.hasError || !snapshot.hasData) {
                return const SizedBox.shrink();
            }
            /// When the texture id is retrieved, it will be possible
            /// to start the renderer, set a shader and display it.

            /// Start renderer thread
            OpenGLController().openglFFI.startThread();

            /// Set the fragment shader
            OpenGLController().openglFFI.setShaderToy(fShader);

            /// build the texture widget
            return OpenGLTexture(id: snapshot.data!);
        },
    ),
)
```
Look at ***example/lib/main_in_deep.dart*** for a full fledged example.

Once the renderer is started all the below methods can be used via *OpenGLController().openglFFI*:

| method | description |
| ---- | ---- |
| bool **rendererStatus**() | Returns true if the texture has been created successfully via *OpenGLController().openglPlugin.createSurface()* |
| Size **getTextureSize**() | Get the size of the current texture. If not set it returns Size(-1, -1)|
| **startThread**() | Starts the drawing thread loop. |
| **stopThread**() | Delete shader, delete texture and stops the drawing thread loop. |
|String **setShader**(bool isContinuous, String vertexShader, String fragmentShader)|**isContinuous** not used yet.<br>**vertexShader** String of the vertex shader source. <br> **fragmentShader** String of the fragment shader source<br><br>returns the compiling shader error string or an empty string if no errors.|
| String **setShaderToy**(String fragmentShader) |Set the shader to be used in the current texture.<br>These are only fragment shaders taken from ShaderToy.com<br>Many of the shaders can be copy/pasted, but they must have only the "image" layer (ie no buffer).<br>Also many of them could be heavy for mobile devices (few FPS).<br><br>The uniforms actually available and automatically registered are:<br>float **iTime**<br>vec4 **iMouse**<br>vec3 **iResolution**<br>Sampler2D **iChannel[0-3]**|
| String **getVertexShader**() |Get current vertex shader text.|
| String **getFragmentShader**() |Get current fragment shader text.|
| **addShaderToyUniforms**() |add these uniforms:<br>vec4 **iMouse**<br>vec3 **iResolution**<br>float **iTime**<br>Sampler2D **iChannel[0-3]**<br>These uniforms are automatically set when using **setShaderToy()**|
|**setMousePosition**(Offset startingPos, Offset pos, PointerEventType eventType, Size twSize)|Set the **iMouse** uniform.<br>How to use the mouse input (only left button supported):<br>mouse.xy  = mouse position during last button down<br>abs(mouse.zw) = mouse position during last button click<br>sign(mouze.z)  = button is down<br>sign(mouze.w)  = button is clicked<br><br>This is automatically processed by **OpenGLTexture** widget<br><br>For reference:<br>https://www.shadertoy.com/view/llySRh<br>https://www.shadertoy.com/view/Mss3zH|
| double **getFps**() |Get current FPS (capped to 100).|
|bool **addBoolUniform**(String name, bool val)<br>bool **addIntUniform**(String name, int val)<br>bool **addFloatUniform**(String name, double val)<br>bool **addVec2Uniform**(String name, List`<double>` val)<br>bool **addVec3Uniform**(String name, List`<double>` val)<br>bool **addVec4Uniform**(String name, List`<double>` val)<br>bool **addMat2Uniform**(String name, List`<double>` val)<br>bool **addMat3Uniform**(String name, List`<double>` val)<br>bool **addMat4Uniform**(String name, List`<double>` val)| Add an uniforms.<br>Return true if succes or false if already added.|
|bool **addSampler2DUniform**(String name, int width, int height, Uint8List val)| Add a Sampler2D uniform. The raw image stored in *val* must be in RGBA32 format.|
|bool **replaceSampler2DUniform**(String name, int width, int height, Uint8List val)|Replace a Sampler2D uniform texture with another one with different size.|
|bool **setBoolUniform**(String name, bool val)<br>bool **setIntUniform**(String name, int val)<br>bool **setFloatUniform**(String name, double val)<br>bool **setVec2Uniform**(String name, List`<double>` val)<br>bool **setVec3Uniform**(String name, List`<double>` val)<br>bool **setVec4Uniform**(String name, List`<double>` val)<br>bool **setMat2Uniform**(String name, List`<double>` val)<br>bool **setMat3Uniform**(String name, List`<double>` val)<br>bool **setMat4Uniform**(String name, List`<double>` val)| Set value of an existing uniform. Return false if the uniform doesn't exist.|
|bool **setSampler2DUniform**(String name, Uint8List val)|Replace a texture with another image with the same size.<br>Be sure the *val* length is the same as the previously stored image with the uniform named *name*.|
|bool **startCaptureOnSampler2D**(String name, String completeFilePath)|Set Sampler2D uniform *name* with frames captured by OpenCV VideoCapture<br><br>*completeFilePath* can be:<br>- 'cam0' for webCam0<br>- 'cam1' for webCam1<br>- a complete local video file path<br><br>**Note**: this video capture is just for reference on how textures work in real time. Videos FPS are not precise and the camera on Android doesn't work.|
| bool **stopCapture**() | Stop capturing thread.|


# Setup

## Linux
Be sure you have **glew**, **glm** and **OpenCV** packages installed.


## Windows
Go into the windows folder from the project root.
-  clone **Native_SDK**:

```git clone https://github.com/powervr-graphics/Native_SDK.git```

you can safely delete all but the *lib* and *include* directories from the cloned repo

- clone **glm**

```git clone https://github.com/g-truc/glm.git```

- download **glew** *Binaries for Windows 32-bit and 64-bit* from here:

[https://glew.sourceforge.net](https://glew.sourceforge.net/) (sources at https://github.com/nigels-com/glew)

extract the zip and rename its main directory to "glew"

- run "SCRIPTS\setupOpenCV-windows.bat" or manually download OpenCV and extract it into SCRIPT dir:
https://github.com/opencv/opencv/releases/download/4.7.0/opencv-4.7.0-windows.exe

## Android
Run the script *SCRIPT/setupOpenCV-android.sh* or manually download OpenCV from here https://github.com/opencv/opencv/releases/download/4.7.0/opencv-4.7.0-android-sdk.zip locate libs and include folders and copy them into android/src/opencv. 

# TODO
- better docomentation
- the c/c++ code is not "state of the art" written! PRs are welcomed
- iOS, Mac and Web support
- ES 3 on Android (now supports 2)
- displayed FPS seems not to be correct
- leave OpenCV into the plugin for further use?


================================================
FILE: SCRIPTS/setupOpenCV-android.sh
================================================
#!/bin/bash

wget https://github.com/opencv/opencv/releases/download/4.7.0/opencv-4.7.0-android-sdk.zip

unzip opencv-4.7.0-android-sdk.zip

rm -frd ../android/src/opencv
cp -r ./OpenCV-android-sdk/sdk/native/libs ../android/src/opencv
cp -r ./OpenCV-android-sdk/sdk/native/jni/include ../android/src/opencv



================================================
FILE: analysis_options.yaml
================================================
include: package:flutter_lints/flutter.yaml

# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options


================================================
FILE: android/.gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.cxx


================================================
FILE: android/CMakeLists.txt
================================================
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
#cmake_minimum_required(VERSION 3.22.1)

# Project-level configuration.
set(PROJECT_NAME "flutter_opengl")
project(${PROJECT_NAME} LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# This value is used when generating builds using this plugin, so it must
# not be changed.
set(PLUGIN_NAME "flutter_opengl_plugin")

message(${ANDROID_ABI})


# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.


add_library(
        # Sets the name of the library.
        ${PLUGIN_NAME}

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        ../src/ndk/ndk.cpp

        ../src/common.h
        ../src/ffi.cpp
        ../src/Renderer.cpp
        ../src/Shader.cpp
        ../src/uniformQueue.cpp
        ../src/Sampler2D.cpp
        ../src/Sampler2D.cpp
        ../src/opencv_capture.cpp
)
#set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--gc-sections,--strip-debug -fvisibility=hidden -fuse-ld=lld")


# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
              log-lib

			  # Specifies the name of the NDK library that
              # you want CMake to locate.
              log)

add_subdirectory(src/glm)
add_library(glm::glm ALIAS glm)


set (OPENCV_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/opencv)
set (OPENCV_LIBS_LOC ${OPENCV_DIR}/${ANDROID_ABI})

# trying to use OpenCV camera with ffmpeg. No success for now
#set (FFMPEG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/ffmpeg)
#set (FFMPEG_LIBS_LOC ${FFMPEG_DIR}/${ANDROID_ABI})

#set (FFMPEG_DIR ${OPENCV_DIR})
#set (FFMPEG_LIBS_LOC ${OPENCV_DIR}/${ANDROID_ABI})

target_link_libraries(
        # Specifies the target library.
        ${PLUGIN_NAME}

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}

        android


        EGL
#       GLESv1_CM
#       GLESv2
        GLESv3
        glm

        dl m mediandk jnigraphics

#        ${OPENCV_LIBS_LOC}/libopencv_core.so
#        ${OPENCV_LIBS_LOC}/libopencv_highgui.so
#        ${OPENCV_LIBS_LOC}/libopencv_imgcodecs.so
#        ${OPENCV_LIBS_LOC}/libopencv_img_hash.so
#        ${OPENCV_LIBS_LOC}/libopencv_imgproc.so
#        ${OPENCV_LIBS_LOC}/libopencv_videoio.so
#        ${OPENCV_LIBS_LOC}/libopencv_video.so
#        ${OPENCV_LIBS_LOC}/libopencv_videostab.so
#        ${OPENCV_LIBS_LOC}/libopencv_dnn.so
#        ${OPENCV_LIBS_LOC}/libopencv_calib3d.so
#        ${OPENCV_LIBS_LOC}/libopencv_photo.so
#        ${OPENCV_LIBS_LOC}/libopencv_features2d.so
#        ${OPENCV_LIBS_LOC}/libopencv_flann.so
        ${OPENCV_DIR}/${ANDROID_ABI}/libopencv_java4.so

#        ${FFMPEG_LIBS_LOC}/libavcodec.so
#        ${FFMPEG_LIBS_LOC}/libavdevice.so
#        ${FFMPEG_LIBS_LOC}/libavfilter.so
#        ${FFMPEG_LIBS_LOC}/libavformat.so
#        ${FFMPEG_LIBS_LOC}/libavutil.so
#        ${FFMPEG_LIBS_LOC}/libswresample.so
#        ${FFMPEG_LIBS_LOC}/libswscale.so
)

include_directories( ../src )
include_directories( src/glm/ )
include_directories( ${OPENCV_DIR}/include )
include_directories( ${FFMPEG_DIR}/include )


================================================
FILE: android/build.gradle
================================================
group 'com.example.flutter_opengl'
version '1.0'

buildscript {
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
//        classpath 'com.android.tools.build:gradle:7.1.3'
        classpath 'com.android.tools.build:gradle:7.3.1'
    }
}

rootProject.allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

apply plugin: 'com.android.library'

android {
    compileSdkVersion 33

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        minSdkVersion 24
        targetSdkVersion 33

        packagingOptions {
            doNotStrip '**.so'
        }

        sourceSets {
            main {
                jniLibs.srcDirs = ['src/opencv/libs']
            }
        }

        externalNativeBuild {
            cmake {
                arguments '-DBUILD_TESTING=OFF',
                        '-DANDROID_TOOLCHAIN=clang',
                        '-DCMAKE_VERBOSE_MAKEFILE=ON',
                        '-DANDROID_STL=c++_shared'
                cppFlags "-std=c++17 -fexceptions -frtti -stdlib=libc++ -v"
            }
        }
    }

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
//            version "3.22.1"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
        }
    }
    buildToolsVersion '32.0.0'
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}



================================================
FILE: android/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: android/gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi

# Collect all arguments for the java command;
#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
#     shell script including quotes and variable substitutions, so put them in
#     double quotes to make sure that they get re-expanded; and
#   * put everything else in single quotes, so that it's not re-expanded.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -classpath "$CLASSPATH" \
        org.gradle.wrapper.GradleWrapperMain \
        "$@"

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: android/gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: android/proguard-rules.pro
================================================
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-dontwarn android.**

-keep class androidx.lifecycle.** { *; } #https://github.com/flutter/flutter/issues/58479


================================================
FILE: android/settings.gradle
================================================
rootProject.name = 'flutter_opengl'


================================================
FILE: android/src/glm/CMakeLists.txt
================================================
file(GLOB ROOT_SOURCE *.cpp)
file(GLOB ROOT_INLINE *.inl)
file(GLOB ROOT_HEADER *.hpp)
file(GLOB ROOT_TEXT ../*.txt)
file(GLOB ROOT_MD ../*.md)
file(GLOB ROOT_NAT ../util/glm.natvis)

file(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp)
file(GLOB_RECURSE CORE_INLINE ./detail/*.inl)
file(GLOB_RECURSE CORE_HEADER ./detail/*.hpp)

file(GLOB_RECURSE EXT_SOURCE ./ext/*.cpp)
file(GLOB_RECURSE EXT_INLINE ./ext/*.inl)
file(GLOB_RECURSE EXT_HEADER ./ext/*.hpp)

file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)
file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)
file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)

file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)
file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)
file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)

file(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp)
file(GLOB_RECURSE SIMD_INLINE ./simd/*.inl)
file(GLOB_RECURSE SIMD_HEADER ./simd/*.h)

source_group("Text Files" FILES ${ROOT_TEXT} ${ROOT_MD})
source_group("Core Files" FILES ${CORE_SOURCE})
source_group("Core Files" FILES ${CORE_INLINE})
source_group("Core Files" FILES ${CORE_HEADER})
source_group("EXT Files" FILES ${EXT_SOURCE})
source_group("EXT Files" FILES ${EXT_INLINE})
source_group("EXT Files" FILES ${EXT_HEADER})
source_group("GTC Files" FILES ${GTC_SOURCE})
source_group("GTC Files" FILES ${GTC_INLINE})
source_group("GTC Files" FILES ${GTC_HEADER})
source_group("GTX Files" FILES ${GTX_SOURCE})
source_group("GTX Files" FILES ${GTX_INLINE})
source_group("GTX Files" FILES ${GTX_HEADER})
source_group("SIMD Files" FILES ${SIMD_SOURCE})
source_group("SIMD Files" FILES ${SIMD_INLINE})
source_group("SIMD Files" FILES ${SIMD_HEADER})

add_library(glm INTERFACE)
target_include_directories(glm INTERFACE ../)

if(BUILD_STATIC_LIBS)
add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
	${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER}
	${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}
	${EXT_SOURCE}     ${EXT_INLINE}     ${EXT_HEADER}
	${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}
	${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER}
	${SIMD_SOURCE}    ${SIMD_INLINE}    ${SIMD_HEADER})
	target_link_libraries(glm_static PUBLIC glm)
	add_library(glm::glm_static ALIAS glm_static)
endif()

if(BUILD_SHARED_LIBS)
add_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
	${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER}
	${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}
	${EXT_SOURCE}     ${EXT_INLINE}     ${EXT_HEADER}
	${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}
	${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER}
	${SIMD_SOURCE}    ${SIMD_INLINE}    ${SIMD_HEADER})
	target_link_libraries(glm_shared PUBLIC glm)
	add_library(glm::glm_shared ALIAS glm_shared)
endif()


================================================
FILE: android/src/glm/common.hpp
================================================
/// @ref core
/// @file glm/common.hpp
///
/// @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>
///
/// @defgroup core_func_common Common functions
/// @ingroup core
///
/// Provides GLSL common functions
///
/// These all operate component-wise. The description is per component.
///
/// Include <glm/common.hpp> to use these core features.

#pragma once

#include "detail/qualifier.hpp"
#include "detail/_fixes.hpp"

namespace glm
{
	/// @addtogroup core_func_common
	/// @{

	/// Returns x if x >= 0; otherwise, it returns -x.
	///
	/// @tparam genType floating-point or signed integer; scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x);

	/// Returns x if x >= 0; otherwise, it returns -x.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point or signed integer scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x);

	/// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> sign(vec<L, T, Q> const& x);

	/// Returns a value equal to the nearest integer that is less then or equal to x.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> floor(vec<L, T, Q> const& x);

	/// Returns a value equal to the nearest integer to x
	/// whose absolute value is not larger than the absolute value of x.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> trunc(vec<L, T, Q> const& x);

	/// Returns a value equal to the nearest integer to x.
	/// 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.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> round(vec<L, T, Q> const& x);

	/// Returns a value equal to the nearest integer to x.
	/// 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.)
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a>
	/// @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>
	/// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> roundEven(vec<L, T, Q> const& x);

	/// Returns a value equal to the nearest integer
	/// that is greater than or equal to x.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> ceil(vec<L, T, Q> const& x);

	/// Return x - floor(x).
	///
	/// @tparam genType Floating-point scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL genType fract(genType x);

	/// Return x - floor(x).
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> fract(vec<L, T, Q> const& x);

	template<typename genType>
	GLM_FUNC_DECL genType mod(genType x, genType y);

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, T y);

	/// Modulus. Returns x - y * floor(x / y)
	/// for each component in x using the floating point value y.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y);

	/// Returns the fractional part of x and sets i to the integer
	/// part (as a whole number floating point value). Both the
	/// return value and the output parameter will have the same
	/// sign as x.
	///
	/// @tparam genType Floating-point scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL genType modf(genType x, genType& i);

	/// Returns y if y < x; otherwise, it returns x.
	///
	/// @tparam genType Floating-point or integer; scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y);

	/// Returns y if y < x; otherwise, it returns x.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point or integer scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, T y);

	/// Returns y if y < x; otherwise, it returns x.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point or integer scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y);

	/// Returns y if x < y; otherwise, it returns x.
	///
	/// @tparam genType Floating-point or integer; scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y);

	/// Returns y if x < y; otherwise, it returns x.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point or integer scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, T y);

	/// Returns y if x < y; otherwise, it returns x.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point or integer scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y);

	/// Returns min(max(x, minVal), maxVal) for each component in x
	/// using the floating-point values minVal and maxVal.
	///
	/// @tparam genType Floating-point or integer; scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal);

	/// Returns min(max(x, minVal), maxVal) for each component in x
	/// using the floating-point values minVal and maxVal.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point or integer scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal);

	/// Returns min(max(x, minVal), maxVal) for each component in x
	/// using the floating-point values minVal and maxVal.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point or integer scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal);

	/// 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.
	/// The value for a is not restricted to the range [0, 1].
	///
	/// 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.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a>
	/// @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>
	///
	/// @param[in]  x Value to interpolate.
	/// @param[in]  y Value to interpolate.
	/// @param[in]  a Interpolant.
	///
	/// @tparam	genTypeT Floating point scalar or vector.
	/// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
	///
	/// @code
	/// #include <glm/glm.hpp>
	/// ...
	/// float a;
	/// bool b;
	/// glm::dvec3 e;
	/// glm::dvec3 f;
	/// glm::vec4 g;
	/// glm::vec4 h;
	/// ...
	/// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
	/// glm::vec4 s = glm::mix(g, h, b); // Returns g or h;
	/// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
	/// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
	/// @endcode
	template<typename genTypeT, typename genTypeU>
	GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a);

	template<length_t L, typename T, typename U, qualifier Q>
	GLM_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);

	template<length_t L, typename T, typename U, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a);

	/// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL genType step(genType edge, genType x);

	/// Returns 0.0 if x < edge, otherwise it returns 1.0.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> step(T edge, vec<L, T, Q> const& x);

	/// Returns 0.0 if x < edge, otherwise it returns 1.0.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x);

	/// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
	/// performs smooth Hermite interpolation between 0 and 1
	/// when edge0 < x < edge1. 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 >= edge1.
	///
	/// @tparam genType Floating-point scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x);

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x);

	template<length_t L, typename T, qualifier Q>
	GLM_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);

	/// Returns true if x holds a NaN (not a number)
	/// representation in the underlying implementation's set of
	/// floating point representations. Returns false otherwise,
	/// including for implementations with no NaN
	/// representations.
	///
	/// /!\ When using compiler fast math, this function may fail.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, bool, Q> isnan(vec<L, T, Q> const& x);

	/// Returns true if x holds a positive infinity or negative
	/// infinity representation in the underlying implementation's
	/// set of floating point representations. Returns false
	/// otherwise, including for implementations with no infinity
	/// representations.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam T Floating-point scalar types
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a>
	/// @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>
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, bool, Q> isinf(vec<L, T, Q> const& x);

	/// Returns a signed integer value representing
	/// the encoding of a floating-point value. The floating-point
	/// value's bit-level representation is preserved.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
	/// @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>
	GLM_FUNC_DECL int floatBitsToInt(float const& v);

	/// Returns a signed integer value representing
	/// the encoding of a floating-point value. The floatingpoint
	/// value's bit-level representation is preserved.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
	/// @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>
	template<length_t L, qualifier Q>
	GLM_FUNC_DECL vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v);

	/// Returns a unsigned integer value representing
	/// the encoding of a floating-point value. The floatingpoint
	/// value's bit-level representation is preserved.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
	/// @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>
	GLM_FUNC_DECL uint floatBitsToUint(float const& v);

	/// Returns a unsigned integer value representing
	/// the encoding of a floating-point value. The floatingpoint
	/// value's bit-level representation is preserved.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
	/// @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>
	template<length_t L, qualifier Q>
	GLM_FUNC_DECL vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v);

	/// Returns a floating-point value corresponding to a signed
	/// integer encoding of a floating-point value.
	/// 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.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
	/// @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>
	GLM_FUNC_DECL float intBitsToFloat(int const& v);

	/// Returns a floating-point value corresponding to a signed
	/// integer encoding of a floating-point value.
	/// 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.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
	/// @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>
	template<length_t L, qualifier Q>
	GLM_FUNC_DECL vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v);

	/// Returns a floating-point value corresponding to a
	/// unsigned integer encoding of a floating-point value.
	/// 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.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
	/// @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>
	GLM_FUNC_DECL float uintBitsToFloat(uint const& v);

	/// Returns a floating-point value corresponding to a
	/// unsigned integer encoding of a floating-point value.
	/// 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.
	///
	/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
	/// @tparam Q Value from qualifier enum
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
	/// @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>
	template<length_t L, qualifier Q>
	GLM_FUNC_DECL vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v);

	/// Computes and returns a * b + c.
	///
	/// @tparam genType Floating-point scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c);

	/// 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)
	///
	/// 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.
	///
	/// @tparam genType Floating-point scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a>
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL genType frexp(genType x, int& exp);
	
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp);

	/// Builds a floating-point number from x and the
	/// corresponding integral exponent of two in exp, returning:
	/// significand * exp(2, exponent)
	///
	/// If this product is too large to be represented in the
	/// floating-point type, the result is undefined.
	///
	/// @tparam genType Floating-point scalar or vector types.
	///
	/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>;
	/// @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>
	template<typename genType>
	GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp);
	
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_DECL vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp);

	/// @}
}//namespace glm

#include "detail/func_common.inl"



================================================
FILE: android/src/glm/detail/_features.hpp
================================================
#pragma once

// #define GLM_CXX98_EXCEPTIONS
// #define GLM_CXX98_RTTI

// #define GLM_CXX11_RVALUE_REFERENCES
// Rvalue references - GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html

// GLM_CXX11_TRAILING_RETURN
// Rvalue references for *this - GCC not supported
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm

// GLM_CXX11_NONSTATIC_MEMBER_INIT
// Initialization of class objects by rvalues - GCC any
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html

// GLM_CXX11_NONSTATIC_MEMBER_INIT
// Non-static data member initializers - GCC 4.7
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm

// #define GLM_CXX11_VARIADIC_TEMPLATE
// Variadic templates - GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf

//
// Extending variadic template template parameters - GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf

// #define GLM_CXX11_GENERALIZED_INITIALIZERS
// Initializer lists - GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm

// #define GLM_CXX11_STATIC_ASSERT
// Static assertions - GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html

// #define GLM_CXX11_AUTO_TYPE
// auto-typed variables - GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf

// #define GLM_CXX11_AUTO_TYPE
// Multi-declarator auto - GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf

// #define GLM_CXX11_AUTO_TYPE
// Removal of auto as a storage-class specifier - GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm

// #define GLM_CXX11_AUTO_TYPE
// New function declarator syntax - GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm

// #define GLM_CXX11_LAMBDAS
// New wording for C++0x lambdas - GCC 4.5
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf

// #define GLM_CXX11_DECLTYPE
// Declared type of an expression - GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf

//
// Right angle brackets - GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html

//
// Default template arguments for function templates	DR226	GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226

//
// Solving the SFINAE problem for expressions	DR339	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html

// #define GLM_CXX11_ALIAS_TEMPLATE
// Template aliases	N2258	GCC 4.7
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf

//
// Extern templates	N1987	Yes
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm

// #define GLM_CXX11_NULLPTR
// Null pointer constant	N2431	GCC 4.6
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf

// #define GLM_CXX11_STRONG_ENUMS
// Strongly-typed enums	N2347	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf

//
// Forward declarations for enums	N2764	GCC 4.6
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf

//
// Generalized attributes	N2761	GCC 4.8
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf

//
// Generalized constant expressions	N2235	GCC 4.6
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf

//
// Alignment support	N2341	GCC 4.8
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf

// #define GLM_CXX11_DELEGATING_CONSTRUCTORS
// Delegating constructors	N1986	GCC 4.7
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf

//
// Inheriting constructors	N2540	GCC 4.8
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm

// #define GLM_CXX11_EXPLICIT_CONVERSIONS
// Explicit conversion operators	N2437	GCC 4.5
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf

//
// New character types	N2249	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html

//
// Unicode string literals	N2442	GCC 4.5
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm

//
// Raw string literals	N2442	GCC 4.5
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm

//
// Universal character name literals	N2170	GCC 4.5
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html

// #define GLM_CXX11_USER_LITERALS
// User-defined literals		N2765	GCC 4.7
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf

//
// Standard Layout Types	N2342	GCC 4.5
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm

// #define GLM_CXX11_DEFAULTED_FUNCTIONS
// #define GLM_CXX11_DELETED_FUNCTIONS
// Defaulted and deleted functions	N2346	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm

//
// Extended friend declarations	N1791	GCC 4.7
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf

//
// Extending sizeof	N2253	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html

// #define GLM_CXX11_INLINE_NAMESPACES
// Inline namespaces	N2535	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm

// #define GLM_CXX11_UNRESTRICTED_UNIONS
// Unrestricted unions	N2544	GCC 4.6
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf

// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
// Local and unnamed types as template arguments	N2657	GCC 4.5
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm

// #define GLM_CXX11_RANGE_FOR
// Range-based for	N2930	GCC 4.6
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html

// #define GLM_CXX11_OVERRIDE_CONTROL
// Explicit virtual overrides	N2928 N3206 N3272	GCC 4.7
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm

//
// Minimal support for garbage collection and reachability-based leak detection	N2670	No
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm

// #define GLM_CXX11_NOEXCEPT
// Allowing move constructors to throw [noexcept]	N3050	GCC 4.6 (core language only)
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html

//
// Defining move special member functions	N3053	GCC 4.6
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html

//
// Sequence points	N2239	Yes
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html

//
// Atomic operations	N2427	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html

//
// Strong Compare and Exchange	N2748	GCC 4.5
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html

//
// Bidirectional Fences	N2752	GCC 4.8
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm

//
// Memory model	N2429	GCC 4.8
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm

//
// Data-dependency ordering: atomics and memory model	N2664	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm

//
// Propagating exceptions	N2179	GCC 4.4
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html

//
// Abandoning a process and at_quick_exit	N2440	GCC 4.8
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm

//
// Allow atomics use in signal handlers	N2547	Yes
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm

//
// Thread-local storage	N2659	GCC 4.8
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm

//
// Dynamic initialization and destruction with concurrency	N2660	GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm

//
// __func__ predefined identifier	N2340	GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm

//
// C99 preprocessor	N1653	GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm

//
// long long	N1811	GCC 4.3
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf

//
// Extended integral types	N1988	Yes
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf

#if(GLM_COMPILER & GLM_COMPILER_GCC)

#	define GLM_CXX11_STATIC_ASSERT

#elif(GLM_COMPILER & GLM_COMPILER_CLANG)
#	if(__has_feature(cxx_exceptions))
#		define GLM_CXX98_EXCEPTIONS
#	endif

#	if(__has_feature(cxx_rtti))
#		define GLM_CXX98_RTTI
#	endif

#	if(__has_feature(cxx_access_control_sfinae))
#		define GLM_CXX11_ACCESS_CONTROL_SFINAE
#	endif

#	if(__has_feature(cxx_alias_templates))
#		define GLM_CXX11_ALIAS_TEMPLATE
#	endif

#	if(__has_feature(cxx_alignas))
#		define GLM_CXX11_ALIGNAS
#	endif

#	if(__has_feature(cxx_attributes))
#		define GLM_CXX11_ATTRIBUTES
#	endif

#	if(__has_feature(cxx_constexpr))
#		define GLM_CXX11_CONSTEXPR
#	endif

#	if(__has_feature(cxx_decltype))
#		define GLM_CXX11_DECLTYPE
#	endif

#	if(__has_feature(cxx_default_function_template_args))
#		define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
#	endif

#	if(__has_feature(cxx_defaulted_functions))
#		define GLM_CXX11_DEFAULTED_FUNCTIONS
#	endif

#	if(__has_feature(cxx_delegating_constructors))
#		define GLM_CXX11_DELEGATING_CONSTRUCTORS
#	endif

#	if(__has_feature(cxx_deleted_functions))
#		define GLM_CXX11_DELETED_FUNCTIONS
#	endif

#	if(__has_feature(cxx_explicit_conversions))
#		define GLM_CXX11_EXPLICIT_CONVERSIONS
#	endif

#	if(__has_feature(cxx_generalized_initializers))
#		define GLM_CXX11_GENERALIZED_INITIALIZERS
#	endif

#	if(__has_feature(cxx_implicit_moves))
#		define GLM_CXX11_IMPLICIT_MOVES
#	endif

#	if(__has_feature(cxx_inheriting_constructors))
#		define GLM_CXX11_INHERITING_CONSTRUCTORS
#	endif

#	if(__has_feature(cxx_inline_namespaces))
#		define GLM_CXX11_INLINE_NAMESPACES
#	endif

#	if(__has_feature(cxx_lambdas))
#		define GLM_CXX11_LAMBDAS
#	endif

#	if(__has_feature(cxx_local_type_template_args))
#		define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
#	endif

#	if(__has_feature(cxx_noexcept))
#		define GLM_CXX11_NOEXCEPT
#	endif

#	if(__has_feature(cxx_nonstatic_member_init))
#		define GLM_CXX11_NONSTATIC_MEMBER_INIT
#	endif

#	if(__has_feature(cxx_nullptr))
#		define GLM_CXX11_NULLPTR
#	endif

#	if(__has_feature(cxx_override_control))
#		define GLM_CXX11_OVERRIDE_CONTROL
#	endif

#	if(__has_feature(cxx_reference_qualified_functions))
#		define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
#	endif

#	if(__has_feature(cxx_range_for))
#		define GLM_CXX11_RANGE_FOR
#	endif

#	if(__has_feature(cxx_raw_string_literals))
#		define GLM_CXX11_RAW_STRING_LITERALS
#	endif

#	if(__has_feature(cxx_rvalue_references))
#		define GLM_CXX11_RVALUE_REFERENCES
#	endif

#	if(__has_feature(cxx_static_assert))
#		define GLM_CXX11_STATIC_ASSERT
#	endif

#	if(__has_feature(cxx_auto_type))
#		define GLM_CXX11_AUTO_TYPE
#	endif

#	if(__has_feature(cxx_strong_enums))
#		define GLM_CXX11_STRONG_ENUMS
#	endif

#	if(__has_feature(cxx_trailing_return))
#		define GLM_CXX11_TRAILING_RETURN
#	endif

#	if(__has_feature(cxx_unicode_literals))
#		define GLM_CXX11_UNICODE_LITERALS
#	endif

#	if(__has_feature(cxx_unrestricted_unions))
#		define GLM_CXX11_UNRESTRICTED_UNIONS
#	endif

#	if(__has_feature(cxx_user_literals))
#		define GLM_CXX11_USER_LITERALS
#	endif

#	if(__has_feature(cxx_variadic_templates))
#		define GLM_CXX11_VARIADIC_TEMPLATES
#	endif

#endif//(GLM_COMPILER & GLM_COMPILER_CLANG)


================================================
FILE: android/src/glm/detail/_fixes.hpp
================================================
#include <cmath>

//! Workaround for compatibility with other libraries
#ifdef max
#undef max
#endif

//! Workaround for compatibility with other libraries
#ifdef min
#undef min
#endif

//! Workaround for Android
#ifdef isnan
#undef isnan
#endif

//! Workaround for Android
#ifdef isinf
#undef isinf
#endif

//! Workaround for Chrone Native Client
#ifdef log2
#undef log2
#endif



================================================
FILE: android/src/glm/detail/_noise.hpp
================================================
#pragma once

#include "../common.hpp"

namespace glm{
namespace detail
{
	template<typename T>
	GLM_FUNC_QUALIFIER T mod289(T const& x)
	{
		return x - floor(x * (static_cast<T>(1.0) / static_cast<T>(289.0))) * static_cast<T>(289.0);
	}

	template<typename T>
	GLM_FUNC_QUALIFIER T permute(T const& x)
	{
		return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x)
	{
		return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x)
	{
		return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x)
	{
		return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
	}

	template<typename T>
	GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r)
	{
		return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r)
	{
		return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r)
	{
		return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r)
	{
		return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t)
	{
		return (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t)
	{
		return (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t)
	{
		return (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));
	}
}//namespace detail
}//namespace glm



================================================
FILE: android/src/glm/detail/_swizzle.hpp
================================================
#pragma once

namespace glm{
namespace detail
{
	// Internal class for implementing swizzle operators
	template<typename T, int N>
	struct _swizzle_base0
	{
	protected:
		GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast<T*>(_buffer))[i]; }
		GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast<const T*>(_buffer))[i]; }

		// Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
		// The size 1 buffer is assumed to aligned to the actual members so that the
		// elem()
		char    _buffer[1];
	};

	template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned>
	struct _swizzle_base1 : public _swizzle_base0<T, N>
	{
	};

	template<typename T, qualifier Q, int E0, int E1, bool Aligned>
	struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0<T, 2>
	{
		GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()()  const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); }
	};

	template<typename T, qualifier Q, int E0, int E1, int E2, bool Aligned>
	struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0<T, 3>
	{
		GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()()  const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); }
	};

	template<typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned>
	struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0<T, 4>
	{
		GLM_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)); }
	};

	// Internal class for implementing swizzle operators
	/*
		Template parameters:

		T			= type of scalar values (e.g. float, double)
		N			= number of components in the vector (e.g. 3)
		E0...3		= what index the n-th element of this swizzle refers to in the unswizzled vec

		DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
			containing duplicate elements so that they cannot be used as r-values).
	*/
	template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
	struct _swizzle_base2 : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value>
	{
		struct op_equal
		{
			GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; }
		};

		struct op_minus
		{
			GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; }
		};

		struct op_plus
		{
			GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; }
		};

		struct op_mul
		{
			GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; }
		};

		struct op_div
		{
			GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; }
		};

	public:
		GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t)
		{
			for (int i = 0; i < N; ++i)
				(*this)[i] = t;
			return *this;
		}

		GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec<N, T, Q> const& that)
		{
			_apply_op(that, op_equal());
			return *this;
		}

		GLM_FUNC_QUALIFIER void operator -= (vec<N, T, Q> const& that)
		{
			_apply_op(that, op_minus());
		}

		GLM_FUNC_QUALIFIER void operator += (vec<N, T, Q> const& that)
		{
			_apply_op(that, op_plus());
		}

		GLM_FUNC_QUALIFIER void operator *= (vec<N, T, Q> const& that)
		{
			_apply_op(that, op_mul());
		}

		GLM_FUNC_QUALIFIER void operator /= (vec<N, T, Q> const& that)
		{
			_apply_op(that, op_div());
		}

		GLM_FUNC_QUALIFIER T& operator[](size_t i)
		{
			const int offset_dst[4] = { E0, E1, E2, E3 };
			return this->elem(offset_dst[i]);
		}
		GLM_FUNC_QUALIFIER T operator[](size_t i) const
		{
			const int offset_dst[4] = { E0, E1, E2, E3 };
			return this->elem(offset_dst[i]);
		}

	protected:
		template<typename U>
		GLM_FUNC_QUALIFIER void _apply_op(vec<N, T, Q> const& that, const U& op)
		{
			// Make a copy of the data in this == &that.
			// The copier should optimize out the copy in cases where the function is
			// properly inlined and the copy is not necessary.
			T t[N];
			for (int i = 0; i < N; ++i)
				t[i] = that[i];
			for (int i = 0; i < N; ++i)
				op( (*this)[i], t[i] );
		}
	};

	// Specialization for swizzles containing duplicate elements.  These cannot be modified.
	template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>
	struct _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>
	{
		struct Stub {};

		GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; }

		GLM_FUNC_QUALIFIER T operator[]  (size_t i) const
		{
			const int offset_dst[4] = { E0, E1, E2, E3 };
			return this->elem(offset_dst[i]);
		}
	};

	template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>
	struct _swizzle : public _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)>
	{
		typedef _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type;

		using base_type::operator=;

		GLM_FUNC_QUALIFIER operator vec<N, T, Q> () const { return (*this)(); }
	};

//
// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
//
#define GLM_SWIZZLE_TEMPLATE1   template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>
#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>
#define GLM_SWIZZLE_TYPE1       _swizzle<N, T, Q, E0, E1, E2, E3>
#define GLM_SWIZZLE_TYPE2       _swizzle<N, T, Q, F0, F1, F2, F3>

//
// Wrapper for a binary operator (e.g. u.yy + v.zy)
//
#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \
	GLM_SWIZZLE_TEMPLATE2                                                          \
	GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b)  \
	{                                                                               \
		return a() OPERAND b();                                                     \
	}                                                                               \
	GLM_SWIZZLE_TEMPLATE1                                                          \
	GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec<N, T, Q>& b)                   \
	{                                                                               \
		return a() OPERAND b;                                                       \
	}                                                                               \
	GLM_SWIZZLE_TEMPLATE1                                                          \
	GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const vec<N, T, Q>& a, const GLM_SWIZZLE_TYPE1& b)                   \
	{                                                                               \
		return a OPERAND b();                                                       \
	}

//
// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
//
#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)								\
	GLM_SWIZZLE_TEMPLATE1																		\
	GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b)	\
	{																							\
		return a() OPERAND b;																	\
	}																							\
	GLM_SWIZZLE_TEMPLATE1																		\
	GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b)	\
	{																							\
		return a OPERAND b();																	\
	}

//
// Macro for wrapping a function taking one argument (e.g. abs())
//
#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION)												\
	GLM_SWIZZLE_TEMPLATE1																				\
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a)		\
	{																									\
		return FUNCTION(a());																			\
	}

//
// Macro for wrapping a function taking two vector arguments (e.g. dot()).
//
#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION)                                                       \
	GLM_SWIZZLE_TEMPLATE2                                                                                       \
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \
	{                                                                                                           \
		return FUNCTION(a(), b());                                                                              \
	}                                                                                                           \
	GLM_SWIZZLE_TEMPLATE1                                                                                       \
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \
	{                                                                                                           \
		return FUNCTION(a(), b());                                                                              \
	}                                                                                                           \
	GLM_SWIZZLE_TEMPLATE1                                                                                       \
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b)         \
	{                                                                                                           \
		return FUNCTION(a(), b);                                                                                \
	}                                                                                                           \
	GLM_SWIZZLE_TEMPLATE1                                                                                       \
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b)                  \
	{                                                                                                           \
		return FUNCTION(a, b());                                                                                \
	}

//
// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
//
#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION)                                                             \
	GLM_SWIZZLE_TEMPLATE2                                                                                                    \
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c)   \
	{                                                                                                                         \
		return FUNCTION(a(), b(), c);                                                                                         \
	}                                                                                                                         \
	GLM_SWIZZLE_TEMPLATE1                                                                                                    \
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c)   \
	{                                                                                                                         \
		return FUNCTION(a(), b(), c);                                                                                         \
	}                                                                                                                         \
	GLM_SWIZZLE_TEMPLATE1                                                                                                    \
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
	{                                                                                                                         \
		return FUNCTION(a(), b, c);                                                                                           \
	}                                                                                                                         \
	GLM_SWIZZLE_TEMPLATE1                                                                                                    \
	GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c)           \
	{                                                                                                                         \
		return FUNCTION(a, b(), c);                                                                                           \
	}

}//namespace detail
}//namespace glm

namespace glm
{
	namespace detail
	{
		GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
		GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
		GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
		GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
		GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
		GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
	}

	//
	// Swizzles are distinct types from the unswizzled type.  The below macros will
	// provide template specializations for the swizzle types for the given functions
	// so that the compiler does not have any ambiguity to choosing how to handle
	// the function.
	//
	// The alternative is to use the operator()() when calling the function in order
	// to explicitly convert the swizzled type to the unswizzled type.
	//

	//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    abs);
	//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acos);
	//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acosh);
	//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    all);
	//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    any);

	//GLM_SWIZZLE_FUNCTION_2_ARGS(value_type,  dot);
	//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    cross);
	//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    step);
	//GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
}

#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \
	struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \
	struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \
	struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \
	struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; };

#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \
	struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; };

#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \
	struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; };

#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \
	struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \
	struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \
	struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \
	struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \
	struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \
	struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \
	struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \
	struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \
	struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; };

#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \
	struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; };

#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \
	struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; };

#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \
	struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \
	struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \
	struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \
	struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \
	struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \
	struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \
	struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \
	struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \
	struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \
	struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \
	struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \
	struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \
	struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \
	struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \
	struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \
	struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; };

#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \
	struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \
	struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \
	struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \
	struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \
	struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; };

#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \
	struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
	struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; };


================================================
FILE: android/src/glm/detail/_swizzle_func.hpp
================================================
#pragma once

#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B)	\
	vec<2, T, Q> A ## B() CONST							\
	{													\
		return vec<2, T, Q>(this->A, this->B);			\
	}

#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C)		\
	vec<3, T, Q> A ## B ## C() CONST							\
	{															\
		return vec<3, T, Q>(this->A, this->B, this->C);			\
	}

#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D)					\
	vec<4, T, Q> A ## B ## C ## D() CONST									\
	{																		\
		return vec<4, T, Q>(this->A, this->B, this->C, this->D);			\
	}

#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B)	\
	template<typename T>										\
	vec<L, T, Q> vec<L, T, Q>::A ## B() CONST					\
	{															\
		return vec<2, T, Q>(this->A, this->B);					\
	}

#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C)		\
	template<typename T>											\
	vec<3, T, Q> vec<L, T, Q>::A ## B ## C() CONST					\
	{																\
		return vec<3, T, Q>(this->A, this->B, this->C);				\
	}

#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D)		\
	template<typename T>												\
	vec<4, T, Q> vec<L, T, Q>::A ## B ## C ## D() CONST					\
	{																	\
		return vec<4, T, Q>(this->A, this->B, this->C, this->D);		\
	}

#define GLM_MUTABLE

#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A)

#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \
	GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \
	GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \
	GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t)

#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B)

#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A)

#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C)

#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \
	GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \
	GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \
	GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p)

#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C)

#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B)

#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A)

#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)

#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \
	GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \
	GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \
	GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q)

#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B)

#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B)

#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B)

#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \
	GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \
	GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \
	GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B)

#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P)			\
	GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y)	\
	GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g)	\
	GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t)

#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C)

#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C)

#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C)

#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C)

#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \
	GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \
	GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \
	GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p)

#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \
	GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D)

#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \
	GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D)

#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \
	GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D)

#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
	GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)

#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \
	GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \
	GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \
	GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q)



================================================
FILE: android/src/glm/detail/_vectorize.hpp
================================================
#pragma once

namespace glm{
namespace detail
{
	template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename R, typename T, qualifier Q>
	struct functor1{};

	template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>
	struct functor1<vec, 1, R, T, Q>
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v)
		{
			return vec<1, R, Q>(Func(v.x));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>
	struct functor1<vec, 2, R, T, Q>
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v)
		{
			return vec<2, R, Q>(Func(v.x), Func(v.y));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>
	struct functor1<vec, 3, R, T, Q>
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v)
		{
			return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>
	struct functor1<vec, 4, R, T, Q>
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v)
		{
			return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q>
	struct functor2{};

	template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
	struct functor2<vec, 1, T, Q>
	{
		GLM_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)
		{
			return vec<1, T, Q>(Func(a.x, b.x));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
	struct functor2<vec, 2, T, Q>
	{
		GLM_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)
		{
			return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
	struct functor2<vec, 3, T, Q>
	{
		GLM_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)
		{
			return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
	struct functor2<vec, 4, T, Q>
	{
		GLM_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)
		{
			return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q>
	struct functor2_vec_sca{};

	template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
	struct functor2_vec_sca<vec, 1, T, Q>
	{
		GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b)
		{
			return vec<1, T, Q>(Func(a.x, b));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
	struct functor2_vec_sca<vec, 2, T, Q>
	{
		GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b)
		{
			return vec<2, T, Q>(Func(a.x, b), Func(a.y, b));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
	struct functor2_vec_sca<vec, 3, T, Q>
	{
		GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b)
		{
			return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
		}
	};

	template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
	struct functor2_vec_sca<vec, 4, T, Q>
	{
		GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b)
		{
			return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
		}
	};

	template<length_t L, typename T, qualifier Q>
	struct functor2_vec_int {};

	template<typename T, qualifier Q>
	struct functor2_vec_int<1, T, Q>
	{
		GLM_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)
		{
			return vec<1, int, Q>(Func(a.x, b.x));
		}
	};

	template<typename T, qualifier Q>
	struct functor2_vec_int<2, T, Q>
	{
		GLM_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)
		{
			return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));
		}
	};

	template<typename T, qualifier Q>
	struct functor2_vec_int<3, T, Q>
	{
		GLM_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)
		{
			return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
		}
	};

	template<typename T, qualifier Q>
	struct functor2_vec_int<4, T, Q>
	{
		GLM_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)
		{
			return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
		}
	};
}//namespace detail
}//namespace glm


================================================
FILE: android/src/glm/detail/compute_common.hpp
================================================
#pragma once

#include "setup.hpp"
#include <limits>

namespace glm{
namespace detail
{
	template<typename genFIType, bool /*signed*/>
	struct compute_abs
	{};

	template<typename genFIType>
	struct compute_abs<genFIType, true>
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)
		{
			GLM_STATIC_ASSERT(
				std::numeric_limits<genFIType>::is_iec559 || std::numeric_limits<genFIType>::is_signed,
				"'abs' only accept floating-point and integer scalar or vector inputs");

			return x >= genFIType(0) ? x : -x;
			// TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;
		}
	};

#if GLM_COMPILER & GLM_COMPILER_CUDA
	template<>
	struct compute_abs<float, true>
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x)
		{
			return fabsf(x);
		}
	};
#endif

	template<typename genFIType>
	struct compute_abs<genFIType, false>
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)
		{
			GLM_STATIC_ASSERT(
				(!std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),
				"'abs' only accept floating-point and integer scalar or vector inputs");
			return x;
		}
	};
}//namespace detail
}//namespace glm


================================================
FILE: android/src/glm/detail/compute_vector_relational.hpp
================================================
#pragma once

//#include "compute_common.hpp"
#include "setup.hpp"
#include <limits>

namespace glm{
namespace detail
{
	template <typename T, bool isFloat>
	struct compute_equal
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)
		{
			return a == b;
		}
	};
/*
	template <typename T>
	struct compute_equal<T, true>
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)
		{
			return detail::compute_abs<T, std::numeric_limits<T>::is_signed>::call(b - a) <= static_cast<T>(0);
			//return std::memcmp(&a, &b, sizeof(T)) == 0;
		}
	};
*/
}//namespace detail
}//namespace glm


================================================
FILE: android/src/glm/detail/func_common.inl
================================================
/// @ref core
/// @file glm/detail/func_common.inl

#include "../vector_relational.hpp"
#include "compute_common.hpp"
#include "type_vec1.hpp"
#include "type_vec2.hpp"
#include "type_vec3.hpp"
#include "type_vec4.hpp"
#include "_vectorize.hpp"
#include <limits>

namespace glm
{
	// min
	template<typename genType>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'min' only accept floating-point or integer inputs");
		return (y < x) ? y : x;
	}

	// max
	template<typename genType>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'max' only accept floating-point or integer inputs");

		return (x < y) ? y : x;
	}

	// abs
	template<>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x)
	{
		int const y = x >> (sizeof(int) * 8 - 1);
		return (x ^ y) - y;
	}

	// round
#	if GLM_HAS_CXX11_STL
		using ::std::round;
#	else
		template<typename genType>
		GLM_FUNC_QUALIFIER genType round(genType x)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'round' only accept floating-point inputs");

			return 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)));
		}
#	endif

	// trunc
#	if GLM_HAS_CXX11_STL
		using ::std::trunc;
#	else
		template<typename genType>
		GLM_FUNC_QUALIFIER genType trunc(genType x)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'trunc' only accept floating-point inputs");

			return x < static_cast<genType>(0) ? -std::floor(-x) : std::floor(x);
		}
#	endif

}//namespace glm

namespace glm{
namespace detail
{
	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_abs_vector
	{
		GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x)
		{
			return detail::functor1<vec, L, T, T, Q>::call(abs, x);
		}
	};

	template<length_t L, typename T, typename U, qualifier Q, bool Aligned>
	struct compute_mix_vector
	{
		GLM_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)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");

			return vec<L, T, Q>(vec<L, U, Q>(x) * (static_cast<U>(1) - a) + vec<L, U, Q>(y) * a);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_mix_vector<L, T, bool, Q, Aligned>
	{
		GLM_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)
		{
			vec<L, T, Q> Result;
			for(length_t i = 0; i < x.length(); ++i)
				Result[i] = a[i] ? y[i] : x[i];
			return Result;
		}
	};

	template<length_t L, typename T, typename U, qualifier Q, bool Aligned>
	struct compute_mix_scalar
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U const& a)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");

			return vec<L, T, Q>(vec<L, U, Q>(x) * (static_cast<U>(1) - a) + vec<L, U, Q>(y) * a);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_mix_scalar<L, T, bool, Q, Aligned>
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, bool const& a)
		{
			return a ? y : x;
		}
	};

	template<typename T, typename U>
	struct compute_mix
	{
		GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");

			return static_cast<T>(static_cast<U>(x) * (static_cast<U>(1) - a) + static_cast<U>(y) * a);
		}
	};

	template<typename T>
	struct compute_mix<T, bool>
	{
		GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a)
		{
			return a ? y : x;
		}
	};

	template<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned>
	struct compute_sign
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
		{
			return vec<L, T, Q>(glm::lessThan(vec<L, T, Q>(0), x)) - vec<L, T, Q>(glm::lessThan(x, vec<L, T, Q>(0)));
		}
	};

#	if GLM_ARCH == GLM_ARCH_X86
	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_sign<L, T, Q, false, Aligned>
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
		{
			T const Shift(static_cast<T>(sizeof(T) * 8 - 1));
			vec<L, T, Q> const y(vec<L, typename detail::make_unsigned<T>::type, Q>(-x) >> typename detail::make_unsigned<T>::type(Shift));

			return (x >> Shift) | y;
		}
	};
#	endif

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_floor
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
		{
			return detail::functor1<vec, L, T, T, Q>::call(std::floor, x);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_ceil
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
		{
			return detail::functor1<vec, L, T, T, Q>::call(std::ceil, x);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_fract
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
		{
			return x - floor(x);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_trunc
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
		{
			return detail::functor1<vec, L, T, T, Q>::call(trunc, x);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_round
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
		{
			return detail::functor1<vec, L, T, T, Q>::call(round, x);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_mod
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'mod' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs.");
			return a - b * floor(a / b);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_min_vector
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y)
		{
			return detail::functor2<vec, L, T, Q>::call(min, x, y);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_max_vector
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y)
		{
			return detail::functor2<vec, L, T, Q>::call(max, x, y);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_clamp_vector
	{
		GLM_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)
		{
			return min(max(x, minVal), maxVal);
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_step_vector
	{
		GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge, vec<L, T, Q> const& x)
		{
			return mix(vec<L, T, Q>(1), vec<L, T, Q>(0), glm::lessThan(x, edge));
		}
	};

	template<length_t L, typename T, qualifier Q, bool Aligned>
	struct compute_smoothstep_vector
	{
		GLM_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)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs");
			vec<L, T, Q> const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast<T>(0), static_cast<T>(1)));
			return tmp * tmp * (static_cast<T>(3) - static_cast<T>(2) * tmp);
		}
	};
}//namespace detail

	template<typename genFIType>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x)
	{
		return detail::compute_abs<genFIType, std::numeric_limits<genFIType>::is_signed>::call(x);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x)
	{
		return detail::compute_abs_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x);
	}

	// sign
	// fast and works for any type
	template<typename genFIType>
	GLM_FUNC_QUALIFIER genFIType sign(genFIType x)
	{
		GLM_STATIC_ASSERT(
			std::numeric_limits<genFIType>::is_iec559 || (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),
			"'sign' only accept signed inputs");

		return detail::compute_sign<1, genFIType, defaultp,
                                    std::numeric_limits<genFIType>::is_iec559, detail::is_aligned<highp>::value>::call(vec<1, genFIType>(x)).x;
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> sign(vec<L, T, Q> const& x)
	{
		GLM_STATIC_ASSERT(
			std::numeric_limits<T>::is_iec559 || (std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_integer),
			"'sign' only accept signed inputs");

		return detail::compute_sign<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x);
	}

	// floor
	using ::std::floor;
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> floor(vec<L, T, Q> const& x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'floor' only accept floating-point inputs.");
		return detail::compute_floor<L, T, Q, detail::is_aligned<Q>::value>::call(x);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> trunc(vec<L, T, Q> const& x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'trunc' only accept floating-point inputs");
		return detail::compute_trunc<L, T, Q, detail::is_aligned<Q>::value>::call(x);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> round(vec<L, T, Q> const& x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'round' only accept floating-point inputs");
		return detail::compute_round<L, T, Q, detail::is_aligned<Q>::value>::call(x);
	}

/*
	// roundEven
	template<typename genType>
	GLM_FUNC_QUALIFIER genType roundEven(genType const& x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs");

		return genType(int(x + genType(int(x) % 2)));
	}
*/

	// roundEven
	template<typename genType>
	GLM_FUNC_QUALIFIER genType roundEven(genType x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs");

		int Integer = static_cast<int>(x);
		genType IntegerPart = static_cast<genType>(Integer);
		genType FractionalPart = fract(x);

		if(FractionalPart > static_cast<genType>(0.5) || FractionalPart < static_cast<genType>(0.5))
		{
			return round(x);
		}
		else if((Integer % 2) == 0)
		{
			return IntegerPart;
		}
		else if(x <= static_cast<genType>(0)) // Work around...
		{
			return IntegerPart - static_cast<genType>(1);
		}
		else
		{
			return IntegerPart + static_cast<genType>(1);
		}
		//else // Bug on MinGW 4.5.2
		//{
		//	return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0));
		//}
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> roundEven(vec<L, T, Q> const& x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'roundEven' only accept floating-point inputs");
		return detail::functor1<vec, L, T, T, Q>::call(roundEven, x);
	}

	// ceil
	using ::std::ceil;
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> ceil(vec<L, T, Q> const& x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ceil' only accept floating-point inputs");
		return detail::compute_ceil<L, T, Q, detail::is_aligned<Q>::value>::call(x);
	}

	// fract
	template<typename genType>
	GLM_FUNC_QUALIFIER genType fract(genType x)
	{
		return fract(vec<1, genType>(x)).x;
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> fract(vec<L, T, Q> const& x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fract' only accept floating-point inputs");
		return detail::compute_fract<L, T, Q, detail::is_aligned<Q>::value>::call(x);
	}

	// mod
	template<typename genType>
	GLM_FUNC_QUALIFIER genType mod(genType x, genType y)
	{
#		if GLM_COMPILER & GLM_COMPILER_CUDA
			// Another Cuda compiler bug https://github.com/g-truc/glm/issues/530
			vec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y));
			return Result.x;
#		else
			return mod(vec<1, genType, defaultp>(x), y).x;
#		endif
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, T y)
	{
		return detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(y));
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y)
	{
		return detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, y);
	}

	// modf
	template<typename genType>
	GLM_FUNC_QUALIFIER genType modf(genType x, genType & i)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'modf' only accept floating-point inputs");
		return std::modf(x, &i);
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i)
	{
		return vec<1, T, Q>(
			modf(x.x, i.x));
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i)
	{
		return vec<2, T, Q>(
			modf(x.x, i.x),
			modf(x.y, i.y));
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i)
	{
		return vec<3, T, Q>(
			modf(x.x, i.x),
			modf(x.y, i.y),
			modf(x.z, i.z));
	}

	template<typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i)
	{
		return vec<4, T, Q>(
			modf(x.x, i.x),
			modf(x.y, i.y),
			modf(x.z, i.z),
			modf(x.w, i.w));
	}

	//// Only valid if (INT_MIN <= x-y <= INT_MAX)
	//// min(x,y)
	//r = y + ((x - y) & ((x - y) >> (sizeof(int) *
	//CHAR_BIT - 1)));
	//// max(x,y)
	//r = x - ((x - y) & ((x - y) >> (sizeof(int) *
	//CHAR_BIT - 1)));

	// min
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, T b)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'min' only accept floating-point or integer inputs");
		return detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b));
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b)
	{
		return detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b);
	}

	// max
	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& a, T b)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'max' only accept floating-point or integer inputs");
		return detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b));
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& a, vec<L, T, Q> const& b)
	{
		return detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b);
	}

	// clamp
	template<typename genType>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'clamp' only accept floating-point or integer inputs");
		return min(max(x, minVal), maxVal);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'clamp' only accept floating-point or integer inputs");
		return detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(minVal), vec<L, T, Q>(maxVal));
	}

	template<length_t L, typename T, qualifier Q>
	GLM_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)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'clamp' only accept floating-point or integer inputs");
		return detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, minVal, maxVal);
	}

	template<typename genTypeT, typename genTypeU>
	GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
	{
		return detail::compute_mix<genTypeT, genTypeU>::call(x, y, a);
	}

	template<length_t L, typename T, typename U, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a)
	{
		return detail::compute_mix_scalar<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a);
	}

	template<length_t L, typename T, typename U, qualifier Q>
	GLM_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)
	{
		return detail::compute_mix_vector<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a);
	}

	// step
	template<typename genType>
	GLM_FUNC_QUALIFIER genType step(genType edge, genType x)
	{
		return mix(static_cast<genType>(1), static_cast<genType>(0), x < edge);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> step(T edge, vec<L, T, Q> const& x)
	{
		return detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge), x);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x)
	{
		return detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge, x);
	}

	// smoothstep
	template<typename genType>
	GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs");

		genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)));
		return tmp * tmp * (genType(3) - genType(2) * tmp);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x)
	{
		return detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge0), vec<L, T, Q>(edge1), x);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_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)
	{
		return detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge0, edge1, x);
	}

#	if GLM_HAS_CXX11_STL
		using std::isnan;
#	else
		template<typename genType>
		GLM_FUNC_QUALIFIER bool isnan(genType x)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isnan' only accept floating-point inputs");

#			if GLM_HAS_CXX11_STL
				return std::isnan(x);
#			elif GLM_COMPILER & GLM_COMPILER_VC
				return _isnan(x) != 0;
#			elif GLM_COMPILER & GLM_COMPILER_INTEL
#				if GLM_PLATFORM & GLM_PLATFORM_WINDOWS
					return _isnan(x) != 0;
#				else
					return ::isnan(x) != 0;
#				endif
#			elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L
				return _isnan(x) != 0;
#			elif GLM_COMPILER & GLM_COMPILER_CUDA
				return ::isnan(x) != 0;
#			else
				return std::isnan(x);
#			endif
		}
#	endif

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, bool, Q> isnan(vec<L, T, Q> const& v)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs");

		vec<L, bool, Q> Result;
		for (length_t l = 0; l < v.length(); ++l)
			Result[l] = glm::isnan(v[l]);
		return Result;
	}

#	if GLM_HAS_CXX11_STL
		using std::isinf;
#	else
		template<typename genType>
		GLM_FUNC_QUALIFIER bool isinf(genType x)
		{
			GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isinf' only accept floating-point inputs");

#			if GLM_HAS_CXX11_STL
				return std::isinf(x);
#			elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)
#				if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
					return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF;
#				else
					return ::isinf(x);
#				endif
#			elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)
#				if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L)
					return _isinf(x) != 0;
#				else
					return std::isinf(x);
#				endif
#			elif GLM_COMPILER & GLM_COMPILER_CUDA
				// http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab
				return ::isinf(double(x)) != 0;
#			else
				return std::isinf(x);
#			endif
	}
#	endif

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, bool, Q> isinf(vec<L, T, Q> const& v)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isinf' only accept floating-point inputs");

		vec<L, bool, Q> Result;
		for (length_t l = 0; l < v.length(); ++l)
			Result[l] = glm::isinf(v[l]);
		return Result;
	}

	GLM_FUNC_QUALIFIER int floatBitsToInt(float const& v)
	{
		union
		{
			float in;
			int out;
		} u;

		u.in = v;

		return u.out;
	}

	template<length_t L, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v)
	{
		return reinterpret_cast<vec<L, int, Q>&>(const_cast<vec<L, float, Q>&>(v));
	}

	GLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v)
	{
		union
		{
			float in;
			uint out;
		} u;

		u.in = v;

		return u.out;
	}

	template<length_t L, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v)
	{
		return reinterpret_cast<vec<L, uint, Q>&>(const_cast<vec<L, float, Q>&>(v));
	}

	GLM_FUNC_QUALIFIER float intBitsToFloat(int const& v)
	{
		union
		{
			int in;
			float out;
		} u;

		u.in = v;

		return u.out;
	}

	template<length_t L, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v)
	{
		return reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, int, Q>&>(v));
	}

	GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v)
	{
		union
		{
			uint in;
			float out;
		} u;

		u.in = v;

		return u.out;
	}

	template<length_t L, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v)
	{
		return reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, uint, Q>&>(v));
	}

#	if GLM_HAS_CXX11_STL
		using std::fma;
#	else
		template<typename genType>
		GLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c)
		{
			return a * b + c;
		}
#	endif

	template<typename genType>
	GLM_FUNC_QUALIFIER genType frexp(genType x, int& exp)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'frexp' only accept floating-point inputs");

		return std::frexp(x, &exp);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'frexp' only accept floating-point inputs");

		vec<L, T, Q> Result;
		for (length_t l = 0; l < v.length(); ++l)
			Result[l] = std::frexp(v[l], &exp[l]);
		return Result;
	}

	template<typename genType>
	GLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'ldexp' only accept floating-point inputs");

		return std::ldexp(x, exp);
	}

	template<length_t L, typename T, qualifier Q>
	GLM_FUNC_QUALIFIER vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp)
	{
		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ldexp' only accept floating-point inputs");

		vec<L, T, Q> Result;
		for (length_t l = 0; l < v.length(); ++l)
			Result[l] = std::ldexp(v[l], exp[l]);
		return Result;
	}
}//namespace glm

#if GLM_CONFIG_SIMD == GLM_ENABLE
#	include "func_common_simd.inl"
#endif


================================================
FILE: android/src/glm/detail/func_common_simd.inl
================================================
/// @ref core
/
Download .txt
gitextract__ltgg91e/

├── .gitignore
├── .metadata
├── .vscode/
│   ├── c_cpp_properties.json
│   ├── extensions.json
│   ├── launch.json
│   ├── settings.json
│   └── tasks.json
├── CHANGELOG.md
├── LICENSE
├── README.md
├── SCRIPTS/
│   └── setupOpenCV-android.sh
├── analysis_options.yaml
├── android/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       ├── gradle-wrapper.jar
│   │       └── gradle-wrapper.properties
│   ├── gradlew
│   ├── gradlew.bat
│   ├── proguard-rules.pro
│   ├── settings.gradle
│   └── src/
│       ├── glm/
│       │   ├── CMakeLists.txt
│       │   ├── common.hpp
│       │   ├── detail/
│       │   │   ├── _features.hpp
│       │   │   ├── _fixes.hpp
│       │   │   ├── _noise.hpp
│       │   │   ├── _swizzle.hpp
│       │   │   ├── _swizzle_func.hpp
│       │   │   ├── _vectorize.hpp
│       │   │   ├── compute_common.hpp
│       │   │   ├── compute_vector_relational.hpp
│       │   │   ├── func_common.inl
│       │   │   ├── func_common_simd.inl
│       │   │   ├── func_exponential.inl
│       │   │   ├── func_exponential_simd.inl
│       │   │   ├── func_geometric.inl
│       │   │   ├── func_geometric_simd.inl
│       │   │   ├── func_integer.inl
│       │   │   ├── func_integer_simd.inl
│       │   │   ├── func_matrix.inl
│       │   │   ├── func_matrix_simd.inl
│       │   │   ├── func_packing.inl
│       │   │   ├── func_packing_simd.inl
│       │   │   ├── func_trigonometric.inl
│       │   │   ├── func_trigonometric_simd.inl
│       │   │   ├── func_vector_relational.inl
│       │   │   ├── func_vector_relational_simd.inl
│       │   │   ├── glm.cpp
│       │   │   ├── qualifier.hpp
│       │   │   ├── setup.hpp
│       │   │   ├── type_float.hpp
│       │   │   ├── type_half.hpp
│       │   │   ├── type_half.inl
│       │   │   ├── type_mat2x2.hpp
│       │   │   ├── type_mat2x2.inl
│       │   │   ├── type_mat2x3.hpp
│       │   │   ├── type_mat2x3.inl
│       │   │   ├── type_mat2x4.hpp
│       │   │   ├── type_mat2x4.inl
│       │   │   ├── type_mat3x2.hpp
│       │   │   ├── type_mat3x2.inl
│       │   │   ├── type_mat3x3.hpp
│       │   │   ├── type_mat3x3.inl
│       │   │   ├── type_mat3x4.hpp
│       │   │   ├── type_mat3x4.inl
│       │   │   ├── type_mat4x2.hpp
│       │   │   ├── type_mat4x2.inl
│       │   │   ├── type_mat4x3.hpp
│       │   │   ├── type_mat4x3.inl
│       │   │   ├── type_mat4x4.hpp
│       │   │   ├── type_mat4x4.inl
│       │   │   ├── type_mat4x4_simd.inl
│       │   │   ├── type_quat.hpp
│       │   │   ├── type_quat.inl
│       │   │   ├── type_quat_simd.inl
│       │   │   ├── type_vec1.hpp
│       │   │   ├── type_vec1.inl
│       │   │   ├── type_vec2.hpp
│       │   │   ├── type_vec2.inl
│       │   │   ├── type_vec3.hpp
│       │   │   ├── type_vec3.inl
│       │   │   ├── type_vec4.hpp
│       │   │   ├── type_vec4.inl
│       │   │   └── type_vec4_simd.inl
│       │   ├── exponential.hpp
│       │   ├── ext/
│       │   │   ├── matrix_clip_space.hpp
│       │   │   ├── matrix_clip_space.inl
│       │   │   ├── matrix_common.hpp
│       │   │   ├── matrix_common.inl
│       │   │   ├── matrix_double2x2.hpp
│       │   │   ├── matrix_double2x2_precision.hpp
│       │   │   ├── matrix_double2x3.hpp
│       │   │   ├── matrix_double2x3_precision.hpp
│       │   │   ├── matrix_double2x4.hpp
│       │   │   ├── matrix_double2x4_precision.hpp
│       │   │   ├── matrix_double3x2.hpp
│       │   │   ├── matrix_double3x2_precision.hpp
│       │   │   ├── matrix_double3x3.hpp
│       │   │   ├── matrix_double3x3_precision.hpp
│       │   │   ├── matrix_double3x4.hpp
│       │   │   ├── matrix_double3x4_precision.hpp
│       │   │   ├── matrix_double4x2.hpp
│       │   │   ├── matrix_double4x2_precision.hpp
│       │   │   ├── matrix_double4x3.hpp
│       │   │   ├── matrix_double4x3_precision.hpp
│       │   │   ├── matrix_double4x4.hpp
│       │   │   ├── matrix_double4x4_precision.hpp
│       │   │   ├── matrix_float2x2.hpp
│       │   │   ├── matrix_float2x2_precision.hpp
│       │   │   ├── matrix_float2x3.hpp
│       │   │   ├── matrix_float2x3_precision.hpp
│       │   │   ├── matrix_float2x4.hpp
│       │   │   ├── matrix_float2x4_precision.hpp
│       │   │   ├── matrix_float3x2.hpp
│       │   │   ├── matrix_float3x2_precision.hpp
│       │   │   ├── matrix_float3x3.hpp
│       │   │   ├── matrix_float3x3_precision.hpp
│       │   │   ├── matrix_float3x4.hpp
│       │   │   ├── matrix_float3x4_precision.hpp
│       │   │   ├── matrix_float4x2.hpp
│       │   │   ├── matrix_float4x2_precision.hpp
│       │   │   ├── matrix_float4x3.hpp
│       │   │   ├── matrix_float4x3_precision.hpp
│       │   │   ├── matrix_float4x4.hpp
│       │   │   ├── matrix_float4x4_precision.hpp
│       │   │   ├── matrix_int2x2.hpp
│       │   │   ├── matrix_int2x2_sized.hpp
│       │   │   ├── matrix_int2x3.hpp
│       │   │   ├── matrix_int2x3_sized.hpp
│       │   │   ├── matrix_int2x4.hpp
│       │   │   ├── matrix_int2x4_sized.hpp
│       │   │   ├── matrix_int3x2.hpp
│       │   │   ├── matrix_int3x2_sized.hpp
│       │   │   ├── matrix_int3x3.hpp
│       │   │   ├── matrix_int3x3_sized.hpp
│       │   │   ├── matrix_int3x4.hpp
│       │   │   ├── matrix_int3x4_sized.hpp
│       │   │   ├── matrix_int4x2.hpp
│       │   │   ├── matrix_int4x2_sized.hpp
│       │   │   ├── matrix_int4x3.hpp
│       │   │   ├── matrix_int4x3_sized.hpp
│       │   │   ├── matrix_int4x4.hpp
│       │   │   ├── matrix_int4x4_sized.hpp
│       │   │   ├── matrix_projection.hpp
│       │   │   ├── matrix_projection.inl
│       │   │   ├── matrix_relational.hpp
│       │   │   ├── matrix_relational.inl
│       │   │   ├── matrix_transform.hpp
│       │   │   ├── matrix_transform.inl
│       │   │   ├── matrix_uint2x2.hpp
│       │   │   ├── matrix_uint2x2_sized.hpp
│       │   │   ├── matrix_uint2x3.hpp
│       │   │   ├── matrix_uint2x3_sized.hpp
│       │   │   ├── matrix_uint2x4.hpp
│       │   │   ├── matrix_uint2x4_sized.hpp
│       │   │   ├── matrix_uint3x2.hpp
│       │   │   ├── matrix_uint3x2_sized.hpp
│       │   │   ├── matrix_uint3x3.hpp
│       │   │   ├── matrix_uint3x3_sized.hpp
│       │   │   ├── matrix_uint3x4.hpp
│       │   │   ├── matrix_uint3x4_sized.hpp
│       │   │   ├── matrix_uint4x2.hpp
│       │   │   ├── matrix_uint4x2_sized.hpp
│       │   │   ├── matrix_uint4x3.hpp
│       │   │   ├── matrix_uint4x3_sized.hpp
│       │   │   ├── matrix_uint4x4.hpp
│       │   │   ├── matrix_uint4x4_sized.hpp
│       │   │   ├── quaternion_common.hpp
│       │   │   ├── quaternion_common.inl
│       │   │   ├── quaternion_common_simd.inl
│       │   │   ├── quaternion_double.hpp
│       │   │   ├── quaternion_double_precision.hpp
│       │   │   ├── quaternion_exponential.hpp
│       │   │   ├── quaternion_exponential.inl
│       │   │   ├── quaternion_float.hpp
│       │   │   ├── quaternion_float_precision.hpp
│       │   │   ├── quaternion_geometric.hpp
│       │   │   ├── quaternion_geometric.inl
│       │   │   ├── quaternion_relational.hpp
│       │   │   ├── quaternion_relational.inl
│       │   │   ├── quaternion_transform.hpp
│       │   │   ├── quaternion_transform.inl
│       │   │   ├── quaternion_trigonometric.hpp
│       │   │   ├── quaternion_trigonometric.inl
│       │   │   ├── scalar_common.hpp
│       │   │   ├── scalar_common.inl
│       │   │   ├── scalar_constants.hpp
│       │   │   ├── scalar_constants.inl
│       │   │   ├── scalar_int_sized.hpp
│       │   │   ├── scalar_integer.hpp
│       │   │   ├── scalar_integer.inl
│       │   │   ├── scalar_packing.hpp
│       │   │   ├── scalar_packing.inl
│       │   │   ├── scalar_relational.hpp
│       │   │   ├── scalar_relational.inl
│       │   │   ├── scalar_uint_sized.hpp
│       │   │   ├── scalar_ulp.hpp
│       │   │   ├── scalar_ulp.inl
│       │   │   ├── vector_bool1.hpp
│       │   │   ├── vector_bool1_precision.hpp
│       │   │   ├── vector_bool2.hpp
│       │   │   ├── vector_bool2_precision.hpp
│       │   │   ├── vector_bool3.hpp
│       │   │   ├── vector_bool3_precision.hpp
│       │   │   ├── vector_bool4.hpp
│       │   │   ├── vector_bool4_precision.hpp
│       │   │   ├── vector_common.hpp
│       │   │   ├── vector_common.inl
│       │   │   ├── vector_double1.hpp
│       │   │   ├── vector_double1_precision.hpp
│       │   │   ├── vector_double2.hpp
│       │   │   ├── vector_double2_precision.hpp
│       │   │   ├── vector_double3.hpp
│       │   │   ├── vector_double3_precision.hpp
│       │   │   ├── vector_double4.hpp
│       │   │   ├── vector_double4_precision.hpp
│       │   │   ├── vector_float1.hpp
│       │   │   ├── vector_float1_precision.hpp
│       │   │   ├── vector_float2.hpp
│       │   │   ├── vector_float2_precision.hpp
│       │   │   ├── vector_float3.hpp
│       │   │   ├── vector_float3_precision.hpp
│       │   │   ├── vector_float4.hpp
│       │   │   ├── vector_float4_precision.hpp
│       │   │   ├── vector_int1.hpp
│       │   │   ├── vector_int1_sized.hpp
│       │   │   ├── vector_int2.hpp
│       │   │   ├── vector_int2_sized.hpp
│       │   │   ├── vector_int3.hpp
│       │   │   ├── vector_int3_sized.hpp
│       │   │   ├── vector_int4.hpp
│       │   │   ├── vector_int4_sized.hpp
│       │   │   ├── vector_integer.hpp
│       │   │   ├── vector_integer.inl
│       │   │   ├── vector_packing.hpp
│       │   │   ├── vector_packing.inl
│       │   │   ├── vector_relational.hpp
│       │   │   ├── vector_relational.inl
│       │   │   ├── vector_uint1.hpp
│       │   │   ├── vector_uint1_sized.hpp
│       │   │   ├── vector_uint2.hpp
│       │   │   ├── vector_uint2_sized.hpp
│       │   │   ├── vector_uint3.hpp
│       │   │   ├── vector_uint3_sized.hpp
│       │   │   ├── vector_uint4.hpp
│       │   │   ├── vector_uint4_sized.hpp
│       │   │   ├── vector_ulp.hpp
│       │   │   └── vector_ulp.inl
│       │   ├── ext.hpp
│       │   ├── fwd.hpp
│       │   ├── geometric.hpp
│       │   ├── glm.hpp
│       │   ├── gtc/
│       │   │   ├── bitfield.hpp
│       │   │   ├── bitfield.inl
│       │   │   ├── color_space.hpp
│       │   │   ├── color_space.inl
│       │   │   ├── constants.hpp
│       │   │   ├── constants.inl
│       │   │   ├── epsilon.hpp
│       │   │   ├── epsilon.inl
│       │   │   ├── integer.hpp
│       │   │   ├── integer.inl
│       │   │   ├── matrix_access.hpp
│       │   │   ├── matrix_access.inl
│       │   │   ├── matrix_integer.hpp
│       │   │   ├── matrix_inverse.hpp
│       │   │   ├── matrix_inverse.inl
│       │   │   ├── matrix_transform.hpp
│       │   │   ├── matrix_transform.inl
│       │   │   ├── noise.hpp
│       │   │   ├── noise.inl
│       │   │   ├── packing.hpp
│       │   │   ├── packing.inl
│       │   │   ├── quaternion.hpp
│       │   │   ├── quaternion.inl
│       │   │   ├── quaternion_simd.inl
│       │   │   ├── random.hpp
│       │   │   ├── random.inl
│       │   │   ├── reciprocal.hpp
│       │   │   ├── reciprocal.inl
│       │   │   ├── round.hpp
│       │   │   ├── round.inl
│       │   │   ├── type_aligned.hpp
│       │   │   ├── type_precision.hpp
│       │   │   ├── type_precision.inl
│       │   │   ├── type_ptr.hpp
│       │   │   ├── type_ptr.inl
│       │   │   ├── ulp.hpp
│       │   │   ├── ulp.inl
│       │   │   └── vec1.hpp
│       │   ├── gtx/
│       │   │   ├── associated_min_max.hpp
│       │   │   ├── associated_min_max.inl
│       │   │   ├── bit.hpp
│       │   │   ├── bit.inl
│       │   │   ├── closest_point.hpp
│       │   │   ├── closest_point.inl
│       │   │   ├── color_encoding.hpp
│       │   │   ├── color_encoding.inl
│       │   │   ├── color_space.hpp
│       │   │   ├── color_space.inl
│       │   │   ├── color_space_YCoCg.hpp
│       │   │   ├── color_space_YCoCg.inl
│       │   │   ├── common.hpp
│       │   │   ├── common.inl
│       │   │   ├── compatibility.hpp
│       │   │   ├── compatibility.inl
│       │   │   ├── component_wise.hpp
│       │   │   ├── component_wise.inl
│       │   │   ├── dual_quaternion.hpp
│       │   │   ├── dual_quaternion.inl
│       │   │   ├── easing.hpp
│       │   │   ├── easing.inl
│       │   │   ├── euler_angles.hpp
│       │   │   ├── euler_angles.inl
│       │   │   ├── extend.hpp
│       │   │   ├── extend.inl
│       │   │   ├── extended_min_max.hpp
│       │   │   ├── extended_min_max.inl
│       │   │   ├── exterior_product.hpp
│       │   │   ├── exterior_product.inl
│       │   │   ├── fast_exponential.hpp
│       │   │   ├── fast_exponential.inl
│       │   │   ├── fast_square_root.hpp
│       │   │   ├── fast_square_root.inl
│       │   │   ├── fast_trigonometry.hpp
│       │   │   ├── fast_trigonometry.inl
│       │   │   ├── float_notmalize.inl
│       │   │   ├── functions.hpp
│       │   │   ├── functions.inl
│       │   │   ├── gradient_paint.hpp
│       │   │   ├── gradient_paint.inl
│       │   │   ├── handed_coordinate_space.hpp
│       │   │   ├── handed_coordinate_space.inl
│       │   │   ├── hash.hpp
│       │   │   ├── hash.inl
│       │   │   ├── integer.hpp
│       │   │   ├── integer.inl
│       │   │   ├── intersect.hpp
│       │   │   ├── intersect.inl
│       │   │   ├── io.hpp
│       │   │   ├── io.inl
│       │   │   ├── log_base.hpp
│       │   │   ├── log_base.inl
│       │   │   ├── matrix_cross_product.hpp
│       │   │   ├── matrix_cross_product.inl
│       │   │   ├── matrix_decompose.hpp
│       │   │   ├── matrix_decompose.inl
│       │   │   ├── matrix_factorisation.hpp
│       │   │   ├── matrix_factorisation.inl
│       │   │   ├── matrix_interpolation.hpp
│       │   │   ├── matrix_interpolation.inl
│       │   │   ├── matrix_major_storage.hpp
│       │   │   ├── matrix_major_storage.inl
│       │   │   ├── matrix_operation.hpp
│       │   │   ├── matrix_operation.inl
│       │   │   ├── matrix_query.hpp
│       │   │   ├── matrix_query.inl
│       │   │   ├── matrix_transform_2d.hpp
│       │   │   ├── matrix_transform_2d.inl
│       │   │   ├── mixed_product.hpp
│       │   │   ├── mixed_product.inl
│       │   │   ├── norm.hpp
│       │   │   ├── norm.inl
│       │   │   ├── normal.hpp
│       │   │   ├── normal.inl
│       │   │   ├── normalize_dot.hpp
│       │   │   ├── normalize_dot.inl
│       │   │   ├── number_precision.hpp
│       │   │   ├── number_precision.inl
│       │   │   ├── optimum_pow.hpp
│       │   │   ├── optimum_pow.inl
│       │   │   ├── orthonormalize.hpp
│       │   │   ├── orthonormalize.inl
│       │   │   ├── perpendicular.hpp
│       │   │   ├── perpendicular.inl
│       │   │   ├── polar_coordinates.hpp
│       │   │   ├── polar_coordinates.inl
│       │   │   ├── projection.hpp
│       │   │   ├── projection.inl
│       │   │   ├── quaternion.hpp
│       │   │   ├── quaternion.inl
│       │   │   ├── range.hpp
│       │   │   ├── raw_data.hpp
│       │   │   ├── raw_data.inl
│       │   │   ├── rotate_normalized_axis.hpp
│       │   │   ├── rotate_normalized_axis.inl
│       │   │   ├── rotate_vector.hpp
│       │   │   ├── rotate_vector.inl
│       │   │   ├── scalar_multiplication.hpp
│       │   │   ├── scalar_relational.hpp
│       │   │   ├── scalar_relational.inl
│       │   │   ├── spline.hpp
│       │   │   ├── spline.inl
│       │   │   ├── std_based_type.hpp
│       │   │   ├── std_based_type.inl
│       │   │   ├── string_cast.hpp
│       │   │   ├── string_cast.inl
│       │   │   ├── texture.hpp
│       │   │   ├── texture.inl
│       │   │   ├── transform.hpp
│       │   │   ├── transform.inl
│       │   │   ├── transform2.hpp
│       │   │   ├── transform2.inl
│       │   │   ├── type_aligned.hpp
│       │   │   ├── type_aligned.inl
│       │   │   ├── type_trait.hpp
│       │   │   ├── type_trait.inl
│       │   │   ├── vec_swizzle.hpp
│       │   │   ├── vector_angle.hpp
│       │   │   ├── vector_angle.inl
│       │   │   ├── vector_query.hpp
│       │   │   ├── vector_query.inl
│       │   │   ├── wrap.hpp
│       │   │   └── wrap.inl
│       │   ├── integer.hpp
│       │   ├── mat2x2.hpp
│       │   ├── mat2x3.hpp
│       │   ├── mat2x4.hpp
│       │   ├── mat3x2.hpp
│       │   ├── mat3x3.hpp
│       │   ├── mat3x4.hpp
│       │   ├── mat4x2.hpp
│       │   ├── mat4x3.hpp
│       │   ├── mat4x4.hpp
│       │   ├── matrix.hpp
│       │   ├── packing.hpp
│       │   ├── simd/
│       │   │   ├── common.h
│       │   │   ├── exponential.h
│       │   │   ├── geometric.h
│       │   │   ├── integer.h
│       │   │   ├── matrix.h
│       │   │   ├── neon.h
│       │   │   ├── packing.h
│       │   │   ├── platform.h
│       │   │   ├── trigonometric.h
│       │   │   └── vector_relational.h
│       │   ├── trigonometric.hpp
│       │   ├── vec2.hpp
│       │   ├── vec3.hpp
│       │   ├── vec4.hpp
│       │   └── vector_relational.hpp
│       └── main/
│           ├── AndroidManifest.xml
│           └── java/
│               └── com/
│                   └── example/
│                       └── flutter_opengl/
│                           └── FlutterOpenglPlugin.java
├── example/
│   ├── .gitignore
│   ├── README.md
│   ├── analysis_options.yaml
│   ├── android/
│   │   ├── .gitignore
│   │   ├── app/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       ├── debug/
│   │   │       │   └── AndroidManifest.xml
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   ├── java/
│   │   │       │   │   └── com/
│   │   │       │   │       └── example/
│   │   │       │   │           └── flutter_opengl_example/
│   │   │       │   │               └── MainActivity.java
│   │   │       │   ├── kotlin/
│   │   │       │   │   └── com/
│   │   │       │   │       └── example/
│   │   │       │   │           └── flutter_opengl_example/
│   │   │       │   │               └── MainActivity.kt
│   │   │       │   └── res/
│   │   │       │       ├── drawable/
│   │   │       │       │   └── launch_background.xml
│   │   │       │       ├── drawable-v21/
│   │   │       │       │   └── launch_background.xml
│   │   │       │       ├── values/
│   │   │       │       │   └── styles.xml
│   │   │       │       └── values-night/
│   │   │       │           └── styles.xml
│   │   │       └── profile/
│   │   │           └── AndroidManifest.xml
│   │   ├── build.gradle
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradle.properties
│   │   └── settings.gradle
│   ├── ios/
│   │   ├── .gitignore
│   │   ├── Flutter/
│   │   │   ├── AppFrameworkInfo.plist
│   │   │   ├── Debug.xcconfig
│   │   │   └── Release.xcconfig
│   │   ├── Runner/
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── LaunchImage.imageset/
│   │   │   │       ├── Contents.json
│   │   │   │       └── README.md
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── Runner-Bridging-Header.h
│   │   ├── Runner.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace/
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcshareddata/
│   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── Runner.xcscheme
│   │   └── Runner.xcworkspace/
│   │       ├── contents.xcworkspacedata
│   │       └── xcshareddata/
│   │           ├── IDEWorkspaceChecks.plist
│   │           └── WorkspaceSettings.xcsettings
│   ├── lib/
│   │   ├── controls/
│   │   │   ├── ShaderButtons.dart
│   │   │   ├── controls.dart
│   │   │   ├── texture_chooser.dart
│   │   │   └── texture_sizes.dart
│   │   ├── edit_shader.dart
│   │   ├── main.dart
│   │   ├── main_in_deep.dart
│   │   ├── shader_widget.dart
│   │   ├── shadertoy.dart
│   │   ├── states.dart
│   │   └── test_widget.dart
│   ├── linux/
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── flutter/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── generated_plugin_registrant.cc
│   │   │   ├── generated_plugin_registrant.h
│   │   │   └── generated_plugins.cmake
│   │   ├── main.cc
│   │   ├── my_application.cc
│   │   └── my_application.h
│   ├── macos/
│   │   ├── .gitignore
│   │   ├── Flutter/
│   │   │   ├── Flutter-Debug.xcconfig
│   │   │   ├── Flutter-Release.xcconfig
│   │   │   └── GeneratedPluginRegistrant.swift
│   │   ├── Runner/
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Base.lproj/
│   │   │   │   └── MainMenu.xib
│   │   │   ├── Configs/
│   │   │   │   ├── AppInfo.xcconfig
│   │   │   │   ├── Debug.xcconfig
│   │   │   │   ├── Release.xcconfig
│   │   │   │   └── Warnings.xcconfig
│   │   │   ├── DebugProfile.entitlements
│   │   │   ├── Info.plist
│   │   │   ├── MainFlutterWindow.swift
│   │   │   └── Release.entitlements
│   │   ├── Runner.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace/
│   │   │   │   └── xcshareddata/
│   │   │   │       └── IDEWorkspaceChecks.plist
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── Runner.xcscheme
│   │   └── Runner.xcworkspace/
│   │       ├── contents.xcworkspacedata
│   │       └── xcshareddata/
│   │           └── IDEWorkspaceChecks.plist
│   ├── pubspec.yaml
│   ├── test/
│   │   └── widget_test.dart
│   └── windows/
│       ├── .gitignore
│       ├── CMakeLists.txt
│       ├── flutter/
│       │   ├── CMakeLists.txt
│       │   ├── generated_plugin_registrant.cc
│       │   ├── generated_plugin_registrant.h
│       │   └── generated_plugins.cmake
│       └── runner/
│           ├── CMakeLists.txt
│           ├── Runner.rc
│           ├── flutter_window.cpp
│           ├── flutter_window.h
│           ├── main.cpp
│           ├── resource.h
│           ├── runner.exe.manifest
│           ├── utils.cpp
│           ├── utils.h
│           ├── win32_window.cpp
│           └── win32_window.h
├── lib/
│   ├── flutter_opengl.dart
│   └── src/
│       ├── flutter_opengl.dart
│       ├── flutter_opengl_ffi.dart
│       ├── flutter_opengl_method_channel.dart
│       ├── flutter_opengl_platform_interface.dart
│       ├── ogl_utils.dart
│       ├── opengl_controller.dart
│       └── opengl_texture.dart
├── linux/
│   ├── CMakeLists.txt
│   ├── fl_my_texture_gl.cc
│   ├── flutter_opengl_plugin.cc
│   ├── include/
│   │   ├── fl_my_texture_gl.h
│   │   ├── flutter_opengl/
│   │   │   └── flutter_opengl_plugin.h
│   │   └── test.h
│   └── test.cpp
├── pubspec.yaml
├── src/
│   ├── Renderer.cpp
│   ├── Renderer.h
│   ├── Sampler2D.cpp
│   ├── Sampler2D.h
│   ├── Shader.cpp
│   ├── Shader.h
│   ├── common.h
│   ├── ffi.cpp
│   ├── ffi.h
│   ├── ndk/
│   │   └── ndk.cpp
│   ├── opencv_capture.cpp
│   ├── opencv_capture.h
│   ├── uniformQueue.cpp
│   └── uniformQueue.h
├── test/
│   ├── flutter_opengl_method_channel_test.dart
│   └── flutter_opengl_test.dart
└── windows/
    ├── .gitignore
    ├── CMakeLists.txt
    ├── fl_my_texture_gl.cc
    ├── fl_my_texture_gl.h
    ├── flutter_opengl_plugin.cpp
    ├── flutter_opengl_plugin.h
    ├── flutter_opengl_plugin_c_api.cpp
    └── include/
        └── flutter_opengl/
            └── flutter_opengl_plugin_c_api.h
Download .txt
SYMBOL INDEX (1496 symbols across 312 files)

FILE: android/src/glm/common.hpp
  type glm (line 20) | namespace glm

FILE: android/src/glm/detail/_noise.hpp
  type glm (line 5) | namespace glm{
    type detail (line 6) | namespace detail
      function GLM_FUNC_QUALIFIER (line 9) | GLM_FUNC_QUALIFIER T mod289(T const& x)
      function GLM_FUNC_QUALIFIER (line 15) | GLM_FUNC_QUALIFIER T permute(T const& x)
      function GLM_FUNC_QUALIFIER (line 21) | GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x)
      function GLM_FUNC_QUALIFIER (line 27) | GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x)
      function GLM_FUNC_QUALIFIER (line 33) | GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x)
      function GLM_FUNC_QUALIFIER (line 39) | GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r)
      function GLM_FUNC_QUALIFIER (line 45) | GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r)
      function GLM_FUNC_QUALIFIER (line 51) | GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r)
      function GLM_FUNC_QUALIFIER (line 57) | GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r)
      function GLM_FUNC_QUALIFIER (line 63) | GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t)
      function GLM_FUNC_QUALIFIER (line 69) | GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t)
      function GLM_FUNC_QUALIFIER (line 75) | GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t)

FILE: android/src/glm/detail/_swizzle.hpp
  type glm (line 3) | namespace glm{
    type detail (line 4) | namespace detail
      type _swizzle_base0 (line 8) | struct _swizzle_base0
        method GLM_FUNC_QUALIFIER (line 11) | GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast<T*>...
        method GLM_FUNC_QUALIFIER (line 12) | GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterp...
      type _swizzle_base1 (line 21) | struct _swizzle_base1 : public _swizzle_base0<T, N>
      type _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> (line 26) | struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizz...
        method GLM_FUNC_QUALIFIER (line 28) | GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()()  const { return vec<...
      type _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> (line 32) | struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizz...
        method GLM_FUNC_QUALIFIER (line 34) | GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()()  const { return vec<...
      type _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> (line 38) | struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizz...
        method GLM_FUNC_QUALIFIER (line 40) | GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()()  const { return vec<...
      type _swizzle_base2 (line 55) | struct _swizzle_base2 : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, ...
        type op_equal (line 57) | struct op_equal
          method GLM_FUNC_QUALIFIER (line 59) | GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; }
        type op_minus (line 62) | struct op_minus
          method GLM_FUNC_QUALIFIER (line 64) | GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; }
        type op_plus (line 67) | struct op_plus
          method GLM_FUNC_QUALIFIER (line 69) | GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; }
        type op_mul (line 72) | struct op_mul
          method GLM_FUNC_QUALIFIER (line 74) | GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; }
        type op_div (line 77) | struct op_div
          method GLM_FUNC_QUALIFIER (line 79) | GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; }
        method GLM_FUNC_QUALIFIER (line 83) | GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t)
        method GLM_FUNC_QUALIFIER (line 90) | GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec<N, T, Q> const& ...
        method GLM_FUNC_QUALIFIER (line 96) | GLM_FUNC_QUALIFIER void operator -= (vec<N, T, Q> const& that)
        method GLM_FUNC_QUALIFIER (line 101) | GLM_FUNC_QUALIFIER void operator += (vec<N, T, Q> const& that)
        method GLM_FUNC_QUALIFIER (line 106) | GLM_FUNC_QUALIFIER void operator *= (vec<N, T, Q> const& that)
        method GLM_FUNC_QUALIFIER (line 111) | GLM_FUNC_QUALIFIER void operator /= (vec<N, T, Q> const& that)
        method GLM_FUNC_QUALIFIER (line 116) | GLM_FUNC_QUALIFIER T& operator[](size_t i)
        method GLM_FUNC_QUALIFIER (line 121) | GLM_FUNC_QUALIFIER T operator[](size_t i) const
        method GLM_FUNC_QUALIFIER (line 129) | GLM_FUNC_QUALIFIER void _apply_op(vec<N, T, Q> const& that, const ...
      type _swizzle_base2<N, T, Q, E0,E1,E2,E3, 1> (line 144) | struct _swizzle_base2<N, T, Q, E0,E1,E2,E3, 1> : public _swizzle_bas...
        type Stub (line 146) | struct Stub {}
        method GLM_FUNC_QUALIFIER (line 148) | GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { retur...
        method GLM_FUNC_QUALIFIER (line 150) | GLM_FUNC_QUALIFIER T operator[]  (size_t i) const
      type _swizzle (line 158) | struct _swizzle : public _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0...
        method GLM_FUNC_QUALIFIER (line 164) | GLM_FUNC_QUALIFIER operator vec<N, T, Q> () const { return (*this)...

FILE: android/src/glm/detail/_vectorize.hpp
  type glm (line 3) | namespace glm{
    type detail (line 4) | namespace detail
      type functor1 (line 7) | struct functor1{}
      type functor1<vec, 1, R, T, Q> (line 10) | struct functor1<vec, 1, R, T, Q>
        method call (line 12) | static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v)
      type functor1<vec, 2, R, T, Q> (line 19) | struct functor1<vec, 2, R, T, Q>
        method call (line 21) | static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v)
      type functor1<vec, 3, R, T, Q> (line 28) | struct functor1<vec, 3, R, T, Q>
        method call (line 30) | static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v)
      type functor1<vec, 4, R, T, Q> (line 37) | struct functor1<vec, 4, R, T, Q>
        method call (line 39) | static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v)
      type functor2 (line 46) | struct functor2{}
      type functor2<vec, 1, T, Q> (line 49) | struct functor2<vec, 1, T, Q>
        method call (line 51) | call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> con...
      type functor2<vec, 2, T, Q> (line 58) | struct functor2<vec, 2, T, Q>
        method call (line 60) | call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> con...
      type functor2<vec, 3, T, Q> (line 67) | struct functor2<vec, 3, T, Q>
        method call (line 69) | call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> con...
      type functor2<vec, 4, T, Q> (line 76) | struct functor2<vec, 4, T, Q>
        method call (line 78) | call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> con...
      type functor2_vec_sca (line 85) | struct functor2_vec_sca{}
      type functor2_vec_sca<vec, 1, T, Q> (line 88) | struct functor2_vec_sca<vec, 1, T, Q>
        method call (line 90) | call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b)
      type functor2_vec_sca<vec, 2, T, Q> (line 97) | struct functor2_vec_sca<vec, 2, T, Q>
        method call (line 99) | call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b)
      type functor2_vec_sca<vec, 3, T, Q> (line 106) | struct functor2_vec_sca<vec, 3, T, Q>
        method call (line 108) | call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b)
      type functor2_vec_sca<vec, 4, T, Q> (line 115) | struct functor2_vec_sca<vec, 4, T, Q>
        method call (line 117) | call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b)
      type functor2_vec_int (line 124) | struct functor2_vec_int {}
      type functor2_vec_int<1, T, Q> (line 127) | struct functor2_vec_int<1, T, Q>
        method call (line 129) | call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, ...
      type functor2_vec_int<2, T, Q> (line 136) | struct functor2_vec_int<2, T, Q>
        method call (line 138) | call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, ...
      type functor2_vec_int<3, T, Q> (line 145) | struct functor2_vec_int<3, T, Q>
        method call (line 147) | call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, ...
      type functor2_vec_int<4, T, Q> (line 154) | struct functor2_vec_int<4, T, Q>
        method call (line 156) | call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, ...

FILE: android/src/glm/detail/compute_common.hpp
  type glm (line 6) | namespace glm{
    type detail (line 7) | namespace detail
      type compute_abs (line 10) | struct compute_abs
      type compute_abs<genFIType, true> (line 14) | struct compute_abs<genFIType, true>
        method genFIType (line 16) | static genFIType call(genFIType x)
      type compute_abs<float, true> (line 29) | struct compute_abs<float, true>
        method call (line 31) | static float call(float x)
      type compute_abs<genFIType, false> (line 39) | struct compute_abs<genFIType, false>
        method genFIType (line 41) | static genFIType call(genFIType x)

FILE: android/src/glm/detail/compute_vector_relational.hpp
  type glm (line 7) | namespace glm{
    type detail (line 8) | namespace detail
      type compute_equal (line 11) | struct compute_equal
        method call (line 13) | static bool call(T a, T b)

FILE: android/src/glm/detail/glm.cpp
  type glm (line 14) | namespace glm
    type vec<1, uint8, lowp> (line 17) | struct vec<1, uint8, lowp>
    type vec<1, uint16, lowp> (line 18) | struct vec<1, uint16, lowp>
    type vec<1, uint32, lowp> (line 19) | struct vec<1, uint32, lowp>
    type vec<1, uint64, lowp> (line 20) | struct vec<1, uint64, lowp>
    type vec<1, int8, lowp> (line 21) | struct vec<1, int8, lowp>
    type vec<1, int16, lowp> (line 22) | struct vec<1, int16, lowp>
    type vec<1, int32, lowp> (line 23) | struct vec<1, int32, lowp>
    type vec<1, int64, lowp> (line 24) | struct vec<1, int64, lowp>
    type vec<1, float32, lowp> (line 25) | struct vec<1, float32, lowp>
    type vec<1, float64, lowp> (line 26) | struct vec<1, float64, lowp>
    type vec<1, uint8, mediump> (line 28) | struct vec<1, uint8, mediump>
    type vec<1, uint16, mediump> (line 29) | struct vec<1, uint16, mediump>
    type vec<1, uint32, mediump> (line 30) | struct vec<1, uint32, mediump>
    type vec<1, uint64, mediump> (line 31) | struct vec<1, uint64, mediump>
    type vec<1, int8, mediump> (line 32) | struct vec<1, int8, mediump>
    type vec<1, int16, mediump> (line 33) | struct vec<1, int16, mediump>
    type vec<1, int32, mediump> (line 34) | struct vec<1, int32, mediump>
    type vec<1, int64, mediump> (line 35) | struct vec<1, int64, mediump>
    type vec<1, float32, mediump> (line 36) | struct vec<1, float32, mediump>
    type vec<1, float64, mediump> (line 37) | struct vec<1, float64, mediump>
    type vec<1, uint8, highp> (line 39) | struct vec<1, uint8, highp>
    type vec<1, uint16, highp> (line 40) | struct vec<1, uint16, highp>
    type vec<1, uint32, highp> (line 41) | struct vec<1, uint32, highp>
    type vec<1, uint64, highp> (line 42) | struct vec<1, uint64, highp>
    type vec<1, int8, highp> (line 43) | struct vec<1, int8, highp>
    type vec<1, int16, highp> (line 44) | struct vec<1, int16, highp>
    type vec<1, int32, highp> (line 45) | struct vec<1, int32, highp>
    type vec<1, int64, highp> (line 46) | struct vec<1, int64, highp>
    type vec<1, float32, highp> (line 47) | struct vec<1, float32, highp>
    type vec<1, float64, highp> (line 48) | struct vec<1, float64, highp>
    type vec<2, uint8, lowp> (line 51) | struct vec<2, uint8, lowp>
    type vec<2, uint16, lowp> (line 52) | struct vec<2, uint16, lowp>
    type vec<2, uint32, lowp> (line 53) | struct vec<2, uint32, lowp>
    type vec<2, uint64, lowp> (line 54) | struct vec<2, uint64, lowp>
    type vec<2, int8, lowp> (line 55) | struct vec<2, int8, lowp>
    type vec<2, int16, lowp> (line 56) | struct vec<2, int16, lowp>
    type vec<2, int32, lowp> (line 57) | struct vec<2, int32, lowp>
    type vec<2, int64, lowp> (line 58) | struct vec<2, int64, lowp>
    type vec<2, float32, lowp> (line 59) | struct vec<2, float32, lowp>
    type vec<2, float64, lowp> (line 60) | struct vec<2, float64, lowp>
    type vec<2, uint8, mediump> (line 62) | struct vec<2, uint8, mediump>
    type vec<2, uint16, mediump> (line 63) | struct vec<2, uint16, mediump>
    type vec<2, uint32, mediump> (line 64) | struct vec<2, uint32, mediump>
    type vec<2, uint64, mediump> (line 65) | struct vec<2, uint64, mediump>
    type vec<2, int8, mediump> (line 66) | struct vec<2, int8, mediump>
    type vec<2, int16, mediump> (line 67) | struct vec<2, int16, mediump>
    type vec<2, int32, mediump> (line 68) | struct vec<2, int32, mediump>
    type vec<2, int64, mediump> (line 69) | struct vec<2, int64, mediump>
    type vec<2, float32, mediump> (line 70) | struct vec<2, float32, mediump>
    type vec<2, float64, mediump> (line 71) | struct vec<2, float64, mediump>
    type vec<2, uint8, highp> (line 73) | struct vec<2, uint8, highp>
    type vec<2, uint16, highp> (line 74) | struct vec<2, uint16, highp>
    type vec<2, uint32, highp> (line 75) | struct vec<2, uint32, highp>
    type vec<2, uint64, highp> (line 76) | struct vec<2, uint64, highp>
    type vec<2, int8, highp> (line 77) | struct vec<2, int8, highp>
    type vec<2, int16, highp> (line 78) | struct vec<2, int16, highp>
    type vec<2, int32, highp> (line 79) | struct vec<2, int32, highp>
    type vec<2, int64, highp> (line 80) | struct vec<2, int64, highp>
    type vec<2, float32, highp> (line 81) | struct vec<2, float32, highp>
    type vec<2, float64, highp> (line 82) | struct vec<2, float64, highp>
    type vec<3, uint8, lowp> (line 85) | struct vec<3, uint8, lowp>
    type vec<3, uint16, lowp> (line 86) | struct vec<3, uint16, lowp>
    type vec<3, uint32, lowp> (line 87) | struct vec<3, uint32, lowp>
    type vec<3, uint64, lowp> (line 88) | struct vec<3, uint64, lowp>
    type vec<3, int8, lowp> (line 89) | struct vec<3, int8, lowp>
    type vec<3, int16, lowp> (line 90) | struct vec<3, int16, lowp>
    type vec<3, int32, lowp> (line 91) | struct vec<3, int32, lowp>
    type vec<3, int64, lowp> (line 92) | struct vec<3, int64, lowp>
    type vec<3, float32, lowp> (line 93) | struct vec<3, float32, lowp>
    type vec<3, float64, lowp> (line 94) | struct vec<3, float64, lowp>
    type vec<3, uint8, mediump> (line 96) | struct vec<3, uint8, mediump>
    type vec<3, uint16, mediump> (line 97) | struct vec<3, uint16, mediump>
    type vec<3, uint32, mediump> (line 98) | struct vec<3, uint32, mediump>
    type vec<3, uint64, mediump> (line 99) | struct vec<3, uint64, mediump>
    type vec<3, int8, mediump> (line 100) | struct vec<3, int8, mediump>
    type vec<3, int16, mediump> (line 101) | struct vec<3, int16, mediump>
    type vec<3, int32, mediump> (line 102) | struct vec<3, int32, mediump>
    type vec<3, int64, mediump> (line 103) | struct vec<3, int64, mediump>
    type vec<3, float32, mediump> (line 104) | struct vec<3, float32, mediump>
    type vec<3, float64, mediump> (line 105) | struct vec<3, float64, mediump>
    type vec<3, uint8, highp> (line 107) | struct vec<3, uint8, highp>
    type vec<3, uint16, highp> (line 108) | struct vec<3, uint16, highp>
    type vec<3, uint32, highp> (line 109) | struct vec<3, uint32, highp>
    type vec<3, uint64, highp> (line 110) | struct vec<3, uint64, highp>
    type vec<3, int8, highp> (line 111) | struct vec<3, int8, highp>
    type vec<3, int16, highp> (line 112) | struct vec<3, int16, highp>
    type vec<3, int32, highp> (line 113) | struct vec<3, int32, highp>
    type vec<3, int64, highp> (line 114) | struct vec<3, int64, highp>
    type vec<3, float32, highp> (line 115) | struct vec<3, float32, highp>
    type vec<3, float64, highp> (line 116) | struct vec<3, float64, highp>
    type vec<4, uint8, lowp> (line 119) | struct vec<4, uint8, lowp>
    type vec<4, uint16, lowp> (line 120) | struct vec<4, uint16, lowp>
    type vec<4, uint32, lowp> (line 121) | struct vec<4, uint32, lowp>
    type vec<4, uint64, lowp> (line 122) | struct vec<4, uint64, lowp>
    type vec<4, int8, lowp> (line 123) | struct vec<4, int8, lowp>
    type vec<4, int16, lowp> (line 124) | struct vec<4, int16, lowp>
    type vec<4, int32, lowp> (line 125) | struct vec<4, int32, lowp>
    type vec<4, int64, lowp> (line 126) | struct vec<4, int64, lowp>
    type vec<4, float32, lowp> (line 127) | struct vec<4, float32, lowp>
    type vec<4, float64, lowp> (line 128) | struct vec<4, float64, lowp>
    type vec<4, uint8, mediump> (line 130) | struct vec<4, uint8, mediump>
    type vec<4, uint16, mediump> (line 131) | struct vec<4, uint16, mediump>
    type vec<4, uint32, mediump> (line 132) | struct vec<4, uint32, mediump>
    type vec<4, uint64, mediump> (line 133) | struct vec<4, uint64, mediump>
    type vec<4, int8, mediump> (line 134) | struct vec<4, int8, mediump>
    type vec<4, int16, mediump> (line 135) | struct vec<4, int16, mediump>
    type vec<4, int32, mediump> (line 136) | struct vec<4, int32, mediump>
    type vec<4, int64, mediump> (line 137) | struct vec<4, int64, mediump>
    type vec<4, float32, mediump> (line 138) | struct vec<4, float32, mediump>
    type vec<4, float64, mediump> (line 139) | struct vec<4, float64, mediump>
    type vec<4, uint8, highp> (line 141) | struct vec<4, uint8, highp>
    type vec<4, uint16, highp> (line 142) | struct vec<4, uint16, highp>
    type vec<4, uint32, highp> (line 143) | struct vec<4, uint32, highp>
    type vec<4, uint64, highp> (line 144) | struct vec<4, uint64, highp>
    type vec<4, int8, highp> (line 145) | struct vec<4, int8, highp>
    type vec<4, int16, highp> (line 146) | struct vec<4, int16, highp>
    type vec<4, int32, highp> (line 147) | struct vec<4, int32, highp>
    type vec<4, int64, highp> (line 148) | struct vec<4, int64, highp>
    type vec<4, float32, highp> (line 149) | struct vec<4, float32, highp>
    type vec<4, float64, highp> (line 150) | struct vec<4, float64, highp>
    type mat<2, 2, float32, lowp> (line 153) | struct mat<2, 2, float32, lowp>
    type mat<2, 2, float64, lowp> (line 154) | struct mat<2, 2, float64, lowp>
    type mat<2, 2, float32, mediump> (line 156) | struct mat<2, 2, float32, mediump>
    type mat<2, 2, float64, mediump> (line 157) | struct mat<2, 2, float64, mediump>
    type mat<2, 2, float32, highp> (line 159) | struct mat<2, 2, float32, highp>
    type mat<2, 2, float64, highp> (line 160) | struct mat<2, 2, float64, highp>
    type mat<2, 3, float32, lowp> (line 163) | struct mat<2, 3, float32, lowp>
    type mat<2, 3, float64, lowp> (line 164) | struct mat<2, 3, float64, lowp>
    type mat<2, 3, float32, mediump> (line 166) | struct mat<2, 3, float32, mediump>
    type mat<2, 3, float64, mediump> (line 167) | struct mat<2, 3, float64, mediump>
    type mat<2, 3, float32, highp> (line 169) | struct mat<2, 3, float32, highp>
    type mat<2, 3, float64, highp> (line 170) | struct mat<2, 3, float64, highp>
    type mat<2, 4, float32, lowp> (line 173) | struct mat<2, 4, float32, lowp>
    type mat<2, 4, float64, lowp> (line 174) | struct mat<2, 4, float64, lowp>
    type mat<2, 4, float32, mediump> (line 176) | struct mat<2, 4, float32, mediump>
    type mat<2, 4, float64, mediump> (line 177) | struct mat<2, 4, float64, mediump>
    type mat<2, 4, float32, highp> (line 179) | struct mat<2, 4, float32, highp>
    type mat<2, 4, float64, highp> (line 180) | struct mat<2, 4, float64, highp>
    type mat<3, 2, float32, lowp> (line 183) | struct mat<3, 2, float32, lowp>
    type mat<3, 2, float64, lowp> (line 184) | struct mat<3, 2, float64, lowp>
    type mat<3, 2, float32, mediump> (line 186) | struct mat<3, 2, float32, mediump>
    type mat<3, 2, float64, mediump> (line 187) | struct mat<3, 2, float64, mediump>
    type mat<3, 2, float32, highp> (line 189) | struct mat<3, 2, float32, highp>
    type mat<3, 2, float64, highp> (line 190) | struct mat<3, 2, float64, highp>
    type mat<3, 3, float32, lowp> (line 193) | struct mat<3, 3, float32, lowp>
    type mat<3, 3, float64, lowp> (line 194) | struct mat<3, 3, float64, lowp>
    type mat<3, 3, float32, mediump> (line 196) | struct mat<3, 3, float32, mediump>
    type mat<3, 3, float64, mediump> (line 197) | struct mat<3, 3, float64, mediump>
    type mat<3, 3, float32, highp> (line 199) | struct mat<3, 3, float32, highp>
    type mat<3, 3, float64, highp> (line 200) | struct mat<3, 3, float64, highp>
    type mat<3, 4, float32, lowp> (line 203) | struct mat<3, 4, float32, lowp>
    type mat<3, 4, float64, lowp> (line 204) | struct mat<3, 4, float64, lowp>
    type mat<3, 4, float32, mediump> (line 206) | struct mat<3, 4, float32, mediump>
    type mat<3, 4, float64, mediump> (line 207) | struct mat<3, 4, float64, mediump>
    type mat<3, 4, float32, highp> (line 209) | struct mat<3, 4, float32, highp>
    type mat<3, 4, float64, highp> (line 210) | struct mat<3, 4, float64, highp>
    type mat<4, 2, float32, lowp> (line 213) | struct mat<4, 2, float32, lowp>
    type mat<4, 2, float64, lowp> (line 214) | struct mat<4, 2, float64, lowp>
    type mat<4, 2, float32, mediump> (line 216) | struct mat<4, 2, float32, mediump>
    type mat<4, 2, float64, mediump> (line 217) | struct mat<4, 2, float64, mediump>
    type mat<4, 2, float32, highp> (line 219) | struct mat<4, 2, float32, highp>
    type mat<4, 2, float64, highp> (line 220) | struct mat<4, 2, float64, highp>
    type mat<4, 3, float32, lowp> (line 223) | struct mat<4, 3, float32, lowp>
    type mat<4, 3, float64, lowp> (line 224) | struct mat<4, 3, float64, lowp>
    type mat<4, 3, float32, mediump> (line 226) | struct mat<4, 3, float32, mediump>
    type mat<4, 3, float64, mediump> (line 227) | struct mat<4, 3, float64, mediump>
    type mat<4, 3, float32, highp> (line 229) | struct mat<4, 3, float32, highp>
    type mat<4, 3, float64, highp> (line 230) | struct mat<4, 3, float64, highp>
    type mat<4, 4, float32, lowp> (line 233) | struct mat<4, 4, float32, lowp>
    type mat<4, 4, float64, lowp> (line 234) | struct mat<4, 4, float64, lowp>
    type mat<4, 4, float32, mediump> (line 236) | struct mat<4, 4, float32, mediump>
    type mat<4, 4, float64, mediump> (line 237) | struct mat<4, 4, float64, mediump>
    type mat<4, 4, float32, highp> (line 239) | struct mat<4, 4, float32, highp>
    type mat<4, 4, float64, highp> (line 240) | struct mat<4, 4, float64, highp>
    type qua<float32, lowp> (line 243) | struct qua<float32, lowp>
    type qua<float64, lowp> (line 244) | struct qua<float64, lowp>
    type qua<float32, mediump> (line 246) | struct qua<float32, mediump>
    type qua<float64, mediump> (line 247) | struct qua<float64, mediump>
    type qua<float32, highp> (line 249) | struct qua<float32, highp>
    type qua<float64, highp> (line 250) | struct qua<float64, highp>
    type tdualquat<float32, lowp> (line 253) | struct tdualquat<float32, lowp>
    type tdualquat<float64, lowp> (line 254) | struct tdualquat<float64, lowp>
    type tdualquat<float32, mediump> (line 256) | struct tdualquat<float32, mediump>
    type tdualquat<float64, mediump> (line 257) | struct tdualquat<float64, mediump>
    type tdualquat<float32, highp> (line 259) | struct tdualquat<float32, highp>
    type tdualquat<float64, highp> (line 260) | struct tdualquat<float64, highp>

FILE: android/src/glm/detail/qualifier.hpp
  type glm (line 5) | namespace glm
    type qualifier (line 8) | enum qualifier
    type vec (line 35) | struct vec
    type mat (line 36) | struct mat
    type qua (line 37) | struct qua
    type detail (line 56) | namespace detail
      type is_aligned (line 59) | struct is_aligned
      type is_aligned<glm::aligned_lowp> (line 66) | struct is_aligned<glm::aligned_lowp>
      type is_aligned<glm::aligned_mediump> (line 72) | struct is_aligned<glm::aligned_mediump>
      type is_aligned<glm::aligned_highp> (line 78) | struct is_aligned<glm::aligned_highp>
      type storage (line 85) | struct storage
        type type (line 87) | struct type {
      type storage<L, T, true> (line 94) | struct storage<L, T, true>
        type type (line 96) | struct alignas(L * sizeof(T)) type {
      type storage<3, T, true> (line 102) | struct storage<3, T, true>
        type type (line 104) | struct alignas(4 * sizeof(T)) type {
      type storage<4, float, true> (line 112) | struct storage<4, float, true>
      type storage<4, int, true> (line 118) | struct storage<4, int, true>
      type storage<4, unsigned int, true> (line 124) | struct storage<4, unsigned int, true>
      type storage<2, double, true> (line 130) | struct storage<2, double, true>
      type storage<2, detail::int64, true> (line 136) | struct storage<2, detail::int64, true>
      type storage<2, detail::uint64, true> (line 142) | struct storage<2, detail::uint64, true>
      type storage<4, double, true> (line 150) | struct storage<4, double, true>
      type storage<4, detail::int64, true> (line 158) | struct storage<4, detail::int64, true>
      type storage<4, detail::uint64, true> (line 164) | struct storage<4, detail::uint64, true>
      type storage<4, float, true> (line 172) | struct storage<4, float, true>
      type storage<4, int, true> (line 178) | struct storage<4, int, true>
      type storage<4, unsigned int, true> (line 184) | struct storage<4, unsigned int, true>
      type genTypeEnum (line 190) | enum genTypeEnum
      type genTypeTrait (line 198) | struct genTypeTrait
      type genTypeTrait<mat<C, R, T> > (line 202) | struct genTypeTrait<mat<C, R, T> >
      type init_gentype (line 208) | struct init_gentype
      type init_gentype<genType, GENTYPE_QUAT> (line 213) | struct init_gentype<genType, GENTYPE_QUAT>
        method genType (line 215) | static genType identity()
      type init_gentype<genType, GENTYPE_MAT> (line 222) | struct init_gentype<genType, GENTYPE_MAT>
        method genType (line 224) | static genType identity()

FILE: android/src/glm/detail/setup.hpp
  type glm (line 541) | namespace glm {
    type std (line 542) | namespace std {
    function countof (line 608) | constexpr std::size_t countof(T const (&)[N])
    type detail (line 628) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 660) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 693) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 702) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
  type glm (line 589) | namespace glm
    type std (line 542) | namespace std {
    function countof (line 608) | constexpr std::size_t countof(T const (&)[N])
    type detail (line 628) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 660) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 693) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 702) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
  type glm (line 605) | namespace glm
    type std (line 542) | namespace std {
    function countof (line 608) | constexpr std::size_t countof(T const (&)[N])
    type detail (line 628) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 660) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 693) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 702) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
  type glm (line 627) | namespace glm{
    type std (line 542) | namespace std {
    function countof (line 608) | constexpr std::size_t countof(T const (&)[N])
    type detail (line 628) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 660) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 693) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 702) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
  type glm (line 659) | namespace glm{
    type std (line 542) | namespace std {
    function countof (line 608) | constexpr std::size_t countof(T const (&)[N])
    type detail (line 628) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 660) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 693) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 702) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
  type glm (line 692) | namespace glm{
    type std (line 542) | namespace std {
    function countof (line 608) | constexpr std::size_t countof(T const (&)[N])
    type detail (line 628) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 660) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 693) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 702) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
  type glm (line 701) | namespace glm{
    type std (line 542) | namespace std {
    function countof (line 608) | constexpr std::size_t countof(T const (&)[N])
    type detail (line 628) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 660) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 693) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>
    type detail (line 702) | namespace detail
      type is_int (line 631) | struct is_int
        type test (line 633) | enum test {value = 0}
      type is_int<unsigned int> (line 637) | struct is_int<unsigned int>
        type test (line 639) | enum test {value = ~0}
      type is_int<signed int> (line 643) | struct is_int<signed int>
        type test (line 645) | enum test {value = ~0}
      type make_unsigned (line 705) | struct make_unsigned
      type make_unsigned<char> (line 709) | struct make_unsigned<char>
      type make_unsigned<signed char> (line 715) | struct make_unsigned<signed char>
      type make_unsigned<short> (line 721) | struct make_unsigned<short>
      type make_unsigned<int> (line 727) | struct make_unsigned<int>
      type make_unsigned<long> (line 733) | struct make_unsigned<long>
      type make_unsigned<int64> (line 739) | struct make_unsigned<int64>
      type make_unsigned<unsigned char> (line 745) | struct make_unsigned<unsigned char>
      type make_unsigned<unsigned short> (line 751) | struct make_unsigned<unsigned short>
      type make_unsigned<unsigned int> (line 757) | struct make_unsigned<unsigned int>
      type make_unsigned<unsigned long> (line 763) | struct make_unsigned<unsigned long>
      type make_unsigned<uint64> (line 769) | struct make_unsigned<uint64>

FILE: android/src/glm/detail/type_float.hpp
  type glm (line 10) | namespace glm{
    type detail (line 11) | namespace detail
      function GLM_CONSTEXPR (line 24) | GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {}
      function GLM_CONSTEXPR (line 26) | GLM_CONSTEXPR float_t& operator=(float_t const& x)
      function GLM_CONSTEXPR (line 33) | GLM_CONSTEXPR bool negative() const { return i < 0; }
      function GLM_CONSTEXPR (line 34) | GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); }
      function GLM_CONSTEXPR (line 35) | GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << ...
      function GLM_CONSTEXPR (line 47) | GLM_CONSTEXPR float_t(float_type Num = static_cast<float_type>(0)) :...
      function GLM_CONSTEXPR (line 49) | GLM_CONSTEXPR float_t& operator=(float_t const& x)
      function GLM_CONSTEXPR (line 56) | GLM_CONSTEXPR bool negative() const { return i < 0; }
      function GLM_CONSTEXPR (line 57) | GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) <...
      function GLM_CONSTEXPR (line 58) | GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_t...

FILE: android/src/glm/detail/type_half.hpp
  type glm (line 5) | namespace glm{
    type detail (line 6) | namespace detail

FILE: android/src/glm/detail/type_mat2x2.hpp
  type glm (line 10) | namespace glm
    type mat<2, 2, T, Q> (line 13) | struct mat<2, 2, T, Q>
      method length_type (line 28) | length_type length() { return 2; }

FILE: android/src/glm/detail/type_mat2x3.hpp
  type glm (line 11) | namespace glm
    type mat<2, 3, T, Q> (line 14) | struct mat<2, 3, T, Q>
      method length_type (line 29) | length_type length() { return 2; }

FILE: android/src/glm/detail/type_mat2x4.hpp
  type glm (line 11) | namespace glm
    type mat<2, 4, T, Q> (line 14) | struct mat<2, 4, T, Q>
      method length_type (line 29) | length_type length() { return 2; }

FILE: android/src/glm/detail/type_mat3x2.hpp
  type glm (line 11) | namespace glm
    type mat<3, 2, T, Q> (line 14) | struct mat<3, 2, T, Q>
      method length_type (line 29) | length_type length() { return 3; }

FILE: android/src/glm/detail/type_mat3x3.hpp
  type glm (line 10) | namespace glm
    type mat<3, 3, T, Q> (line 13) | struct mat<3, 3, T, Q>
      method length_type (line 28) | length_type length() { return 3; }

FILE: android/src/glm/detail/type_mat3x4.hpp
  type glm (line 11) | namespace glm
    type mat<3, 4, T, Q> (line 14) | struct mat<3, 4, T, Q>
      method length_type (line 29) | length_type length() { return 3; }

FILE: android/src/glm/detail/type_mat4x2.hpp
  type glm (line 11) | namespace glm
    type mat<4, 2, T, Q> (line 14) | struct mat<4, 2, T, Q>
      method length_type (line 29) | length_type length() { return 4; }

FILE: android/src/glm/detail/type_mat4x3.hpp
  type glm (line 11) | namespace glm
    type mat<4, 3, T, Q> (line 14) | struct mat<4, 3, T, Q>
      method length_type (line 29) | length_type length() { return 4; }

FILE: android/src/glm/detail/type_mat4x4.hpp
  type glm (line 10) | namespace glm
    type mat<4, 4, T, Q> (line 13) | struct mat<4, 4, T, Q>
      method length_type (line 28) | length_type length(){return 4;}

FILE: android/src/glm/detail/type_quat.hpp
  type glm (line 16) | namespace glm
    type qua (line 19) | struct qua
      method length_type (line 76) | length_type length(){return 4;}

FILE: android/src/glm/detail/type_vec1.hpp
  type glm (line 14) | namespace glm
    type vec<1, T, Q> (line 17) | struct vec<1, T, Q>
      method length_type (line 88) | length_type length(){return 1;}

FILE: android/src/glm/detail/type_vec2.hpp
  type glm (line 14) | namespace glm
    type vec<2, T, Q> (line 17) | struct vec<2, T, Q>
      method length_type (line 87) | length_type length(){return 2;}
      method GLM_FUNC_DECL (line 135) | GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,...

FILE: android/src/glm/detail/type_vec3.hpp
  type glm (line 14) | namespace glm
    type vec<3, T, Q> (line 17) | struct vec<3, T, Q>
      method length_type (line 91) | length_type length(){return 3;}
      method GLM_FUNC_DECL (line 156) | GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2...
      method GLM_FUNC_DECL (line 162) | GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1...
      method GLM_FUNC_DECL (line 168) | GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2,...

FILE: android/src/glm/detail/type_vec4.hpp
  type glm (line 14) | namespace glm
    type vec<4, T, Q> (line 17) | struct vec<4, T, Q>
      method length_type (line 90) | length_type length(){return 4;}
      method GLM_FUNC_DECL (line 205) | GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2...
      method GLM_FUNC_DECL (line 211) | GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1...
      method GLM_FUNC_DECL (line 217) | GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swi...
      method GLM_FUNC_DECL (line 223) | GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q...
      method GLM_FUNC_DECL (line 229) | GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1...
      method GLM_FUNC_DECL (line 235) | GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2...
      method GLM_FUNC_DECL (line 241) | GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q...

FILE: android/src/glm/exponential.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_clip_space.hpp
  type glm (line 31) | namespace glm

FILE: android/src/glm/ext/matrix_common.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_double2x2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double2x2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double2x3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double2x3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double2x4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double2x4_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double3x2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double3x2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double3x3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double3x3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double3x4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double3x4_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double4x2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double4x2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double4x3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double4x3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double4x4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_double4x4_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float2x2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float2x2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float2x3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float2x3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float2x4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float2x4_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float3x2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float3x2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float3x3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float3x3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float3x4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float3x4_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float4x2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float4x2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float4x3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float4x3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float4x4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_float4x4_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/matrix_int2x2.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int2x2_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_int2x3.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int2x3_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_int2x4.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int2x4_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_int3x2.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int3x2_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_int3x3.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int3x3_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_int3x4.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int3x4_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_int4x2.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int4x2_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_int4x3.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int4x3_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_int4x4.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_int4x4_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_projection.hpp
  type glm (line 32) | namespace glm

FILE: android/src/glm/ext/matrix_relational.hpp
  type glm (line 24) | namespace glm

FILE: android/src/glm/ext/matrix_transform.hpp
  type glm (line 32) | namespace glm

FILE: android/src/glm/ext/matrix_uint2x2.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint2x2_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_uint2x3.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint2x3_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_uint2x4.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint2x4_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_uint3x2.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint3x2_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_uint3x3.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint3x3_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_uint3x4.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint3x4_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_uint4x2.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint4x2_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_uint4x3.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint4x3_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/matrix_uint4x4.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/matrix_uint4x4_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/quaternion_common.hpp
  type glm (line 35) | namespace glm

FILE: android/src/glm/ext/quaternion_double.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/ext/quaternion_double_precision.hpp
  type glm (line 20) | namespace glm

FILE: android/src/glm/ext/quaternion_exponential.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/ext/quaternion_float.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/ext/quaternion_float_precision.hpp
  type glm (line 20) | namespace glm

FILE: android/src/glm/ext/quaternion_geometric.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/ext/quaternion_relational.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/ext/quaternion_transform.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/ext/quaternion_trigonometric.hpp
  type glm (line 31) | namespace glm

FILE: android/src/glm/ext/scalar_common.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/scalar_constants.hpp
  type glm (line 20) | namespace glm

FILE: android/src/glm/ext/scalar_int_sized.hpp
  type glm (line 21) | namespace glm{
    type detail (line 22) | namespace detail
      type is_int<int8> (line 35) | struct is_int<int8>
        type test (line 37) | enum test {value = ~0}
      type is_int<int16> (line 41) | struct is_int<int16>
        type test (line 43) | enum test {value = ~0}
      type is_int<int64> (line 47) | struct is_int<int64>
        type test (line 49) | enum test {value = ~0}

FILE: android/src/glm/ext/scalar_integer.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/ext/scalar_packing.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/scalar_relational.hpp
  type glm (line 24) | namespace glm

FILE: android/src/glm/ext/scalar_uint_sized.hpp
  type glm (line 21) | namespace glm{
    type detail (line 22) | namespace detail
      type is_int<uint8> (line 35) | struct is_int<uint8>
        type test (line 37) | enum test {value = ~0}
      type is_int<uint16> (line 41) | struct is_int<uint16>
        type test (line 43) | enum test {value = ~0}
      type is_int<uint64> (line 47) | struct is_int<uint64>
        type test (line 49) | enum test {value = ~0}

FILE: android/src/glm/ext/scalar_ulp.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/ext/vector_bool1.hpp
  type glm (line 21) | namespace glm

FILE: android/src/glm/ext/vector_bool1_precision.hpp
  type glm (line 19) | namespace glm

FILE: android/src/glm/ext/vector_bool2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_bool2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_bool3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_bool3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_bool4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_bool4_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_common.hpp
  type glm (line 24) | namespace glm

FILE: android/src/glm/ext/vector_double1.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/vector_double1_precision.hpp
  type glm (line 21) | namespace glm

FILE: android/src/glm/ext/vector_double2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_double2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_double3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_double3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_double4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_double4_precision.hpp
  type glm (line 8) | namespace glm

FILE: android/src/glm/ext/vector_float1.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/vector_float1_precision.hpp
  type glm (line 21) | namespace glm

FILE: android/src/glm/ext/vector_float2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_float2_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_float3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_float3_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_float4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_float4_precision.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_int1.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/vector_int1_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_int2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_int2_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_int3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_int3_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_int4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_int4_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_integer.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/ext/vector_packing.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_relational.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/ext/vector_uint1.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/ext/vector_uint1_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_uint2.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_uint2_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_uint3.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_uint3_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_uint4.hpp
  type glm (line 7) | namespace glm

FILE: android/src/glm/ext/vector_uint4_sized.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/ext/vector_ulp.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/fwd.hpp
  type glm (line 5) | namespace glm

FILE: android/src/glm/geometric.hpp
  type glm (line 17) | namespace glm

FILE: android/src/glm/gtc/bitfield.hpp
  type glm (line 30) | namespace glm

FILE: android/src/glm/gtc/color_space.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtc/constants.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/gtc/epsilon.hpp
  type glm (line 24) | namespace glm

FILE: android/src/glm/gtc/integer.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtc/matrix_access.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/gtc/matrix_integer.hpp
  type glm (line 30) | namespace glm

FILE: android/src/glm/gtc/matrix_inverse.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtc/noise.hpp
  type glm (line 34) | namespace glm

FILE: android/src/glm/gtc/packing.hpp
  type glm (line 24) | namespace glm

FILE: android/src/glm/gtc/quaternion.hpp
  type glm (line 38) | namespace glm

FILE: android/src/glm/gtc/random.hpp
  type glm (line 25) | namespace glm

FILE: android/src/glm/gtc/reciprocal.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/gtc/round.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtc/type_aligned.hpp
  type glm (line 37) | namespace glm

FILE: android/src/glm/gtc/type_precision.hpp
  type glm (line 46) | namespace glm

FILE: android/src/glm/gtc/type_ptr.hpp
  type glm (line 57) | namespace glm

FILE: android/src/glm/gtc/ulp.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/associated_min_max.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/bit.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/closest_point.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/color_encoding.hpp
  type glm (line 30) | namespace glm

FILE: android/src/glm/gtx/color_space.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/color_space_YCoCg.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/common.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/gtx/compatibility.hpp
  type glm (line 36) | namespace glm
    function GLM_FUNC_QUALIFIER (line 41) | GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}
    function GLM_FUNC_QUALIFIER (line 42) | GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<...
    function GLM_FUNC_QUALIFIER (line 44) | GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<...
    function GLM_FUNC_QUALIFIER (line 45) | GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<...
    function GLM_FUNC_QUALIFIER (line 46) | GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<...
    function GLM_FUNC_QUALIFIER (line 47) | GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<...
    function GLM_FUNC_QUALIFIER (line 48) | GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<...
    function GLM_FUNC_QUALIFIER (line 50) | GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}
    function GLM_FUNC_QUALIFIER (line 51) | GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return...
    function GLM_FUNC_QUALIFIER (line 52) | GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return...
    function GLM_FUNC_QUALIFIER (line 53) | GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return...
    function GLM_FUNC_QUALIFIER (line 55) | GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}
    function GLM_FUNC_QUALIFIER (line 56) | GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec...
    function GLM_FUNC_QUALIFIER (line 57) | GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec...
    function GLM_FUNC_QUALIFIER (line 58) | GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec...

FILE: android/src/glm/gtx/component_wise.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/gtx/dual_quaternion.hpp
  type glm (line 31) | namespace glm
    type tdualquat (line 37) | struct tdualquat
      method length_type (line 52) | length_type length(){return 2;}

FILE: android/src/glm/gtx/easing.hpp
  type glm (line 32) | namespace glm{

FILE: android/src/glm/gtx/euler_angles.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/gtx/extend.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/extended_min_max.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/exterior_product.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtx/fast_exponential.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/fast_square_root.hpp
  type glm (line 30) | namespace glm

FILE: android/src/glm/gtx/fast_trigonometry.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/functions.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/gtx/gradient_paint.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtx/handed_coordinate_space.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/hash.hpp
  type std (line 49) | namespace std
    type hash<glm::vec<1, T,Q> > (line 52) | struct hash<glm::vec<1, T,Q> >
    type hash<glm::vec<2, T,Q> > (line 58) | struct hash<glm::vec<2, T,Q> >
    type hash<glm::vec<3, T,Q> > (line 64) | struct hash<glm::vec<3, T,Q> >
    type hash<glm::vec<4, T,Q> > (line 70) | struct hash<glm::vec<4, T,Q> >
    type hash<glm::qua<T,Q>> (line 76) | struct hash<glm::qua<T,Q>>
    type hash<glm::tdualquat<T,Q> > (line 82) | struct hash<glm::tdualquat<T,Q> >
    type hash<glm::mat<2, 2, T,Q> > (line 88) | struct hash<glm::mat<2, 2, T,Q> >
    type hash<glm::mat<2, 3, T,Q> > (line 94) | struct hash<glm::mat<2, 3, T,Q> >
    type hash<glm::mat<2, 4, T,Q> > (line 100) | struct hash<glm::mat<2, 4, T,Q> >
    type hash<glm::mat<3, 2, T,Q> > (line 106) | struct hash<glm::mat<3, 2, T,Q> >
    type hash<glm::mat<3, 3, T,Q> > (line 112) | struct hash<glm::mat<3, 3, T,Q> >
    type hash<glm::mat<3, 4, T,Q> > (line 118) | struct hash<glm::mat<3, 4, T,Q> >
    type hash<glm::mat<4, 2, T,Q> > (line 124) | struct hash<glm::mat<4, 2, T,Q> >
    type hash<glm::mat<4, 3, T,Q> > (line 130) | struct hash<glm::mat<4, 3, T,Q> >
    type hash<glm::mat<4, 4, T,Q> > (line 136) | struct hash<glm::mat<4, 4, T,Q> >

FILE: android/src/glm/gtx/integer.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/intersect.hpp
  type glm (line 32) | namespace glm

FILE: android/src/glm/gtx/io.hpp
  type glm (line 38) | namespace glm
    type io (line 43) | namespace io
      type order_type (line 45) | enum order_type { column_major, row_major}
      class format_punct (line 48) | class format_punct : public std::locale::facet
      class basic_state_saver (line 71) | class basic_state_saver {
      class basic_format_saver (line 100) | class basic_format_saver
      type precision (line 117) | struct precision
      type width (line 124) | struct width
      type delimeter (line 132) | struct delimeter
      type order (line 139) | struct order

FILE: android/src/glm/gtx/log_base.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/matrix_cross_product.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/matrix_decompose.hpp
  type glm (line 31) | namespace glm

FILE: android/src/glm/gtx/matrix_factorisation.hpp
  type glm (line 32) | namespace glm

FILE: android/src/glm/gtx/matrix_interpolation.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/matrix_major_storage.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/matrix_operation.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/matrix_query.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/gtx/matrix_transform_2d.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtx/mixed_product.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/norm.hpp
  type glm (line 30) | namespace glm

FILE: android/src/glm/gtx/normal.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/normalize_dot.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/number_precision.hpp
  type glm (line 29) | namespace glm{
    type gtx (line 30) | namespace gtx

FILE: android/src/glm/gtx/optimum_pow.hpp
  type glm (line 26) | namespace glm{
    type gtx (line 27) | namespace gtx

FILE: android/src/glm/gtx/orthonormalize.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/gtx/perpendicular.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtx/polar_coordinates.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/projection.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/quaternion.hpp
  type glm (line 31) | namespace glm
    function GLM_FUNC_DECL (line 113) | GLM_FUNC_DECL mat<3, 3, T, Q> toMat3(
    function GLM_FUNC_DECL (line 120) | GLM_FUNC_DECL mat<4, 4, T, Q> toMat4(
    function GLM_FUNC_DECL (line 127) | GLM_FUNC_DECL qua<T, Q> toQuat(
    function GLM_FUNC_DECL (line 134) | GLM_FUNC_DECL qua<T, Q> toQuat(

FILE: android/src/glm/gtx/range.hpp
  type glm (line 29) | namespace glm
    function length_t (line 40) | inline length_t components(vec<1, T, Q> const& v)
    function length_t (line 46) | inline length_t components(vec<2, T, Q> const& v)
    function length_t (line 52) | inline length_t components(vec<3, T, Q> const& v)
    function length_t (line 58) | inline length_t components(vec<4, T, Q> const& v)
    function length_t (line 64) | inline length_t components(genType const& m)

FILE: android/src/glm/gtx/raw_data.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/rotate_normalized_axis.hpp
  type glm (line 30) | namespace glm

FILE: android/src/glm/gtx/rotate_vector.hpp
  type glm (line 30) | namespace glm

FILE: android/src/glm/gtx/scalar_multiplication.hpp
  type glm (line 33) | namespace glm

FILE: android/src/glm/gtx/scalar_relational.hpp
  type glm (line 26) | namespace glm

FILE: android/src/glm/gtx/spline.hpp
  type glm (line 27) | namespace glm

FILE: android/src/glm/gtx/std_based_type.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtx/string_cast.hpp
  type glm (line 39) | namespace glm

FILE: android/src/glm/gtx/texture.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtx/transform.hpp
  type glm (line 30) | namespace glm

FILE: android/src/glm/gtx/transform2.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtx/type_trait.hpp
  type glm (line 28) | namespace glm
    type type (line 34) | struct type
    type type<vec<L, T, Q> > (line 45) | struct type<vec<L, T, Q> >
    type type<mat<C, R, T, Q> > (line 54) | struct type<mat<C, R, T, Q> >
    type type<qua<T, Q> > (line 65) | struct type<qua<T, Q> >
    type type<tdualquat<T, Q> > (line 74) | struct type<tdualquat<T, Q> >

FILE: android/src/glm/gtx/vec_swizzle.hpp
  type glm (line 25) | namespace glm {
    function GLM_INLINE (line 28) | GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {
    function GLM_INLINE (line 33) | GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 38) | GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 43) | GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 49) | GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 54) | GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 59) | GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 65) | GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 70) | GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 76) | GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 82) | GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 87) | GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 92) | GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 98) | GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 103) | GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 108) | GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 114) | GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 119) | GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 125) | GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 131) | GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 136) | GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 142) | GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 147) | GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 153) | GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 158) | GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 164) | GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 170) | GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 176) | GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 182) | GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 188) | GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 194) | GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {
    function GLM_INLINE (line 199) | GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 204) | GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 209) | GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 215) | GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 220) | GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 225) | GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 231) | GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 236) | GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 242) | GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 248) | GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 253) | GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 258) | GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 264) | GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 269) | GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 274) | GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 280) | GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 285) | GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 291) | GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 297) | GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 302) | GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 308) | GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 313) | GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 319) | GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 324) | GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 330) | GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 336) | GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 342) | GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 348) | GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 354) | GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 360) | GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 365) | GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 370) | GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 376) | GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 381) | GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 386) | GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 392) | GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 397) | GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 403) | GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 409) | GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 414) | GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 419) | GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 425) | GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 430) | GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 435) | GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 441) | GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 446) | GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 452) | GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 458) | GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 463) | GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 469) | GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 474) | GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 480) | GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 485) | GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 491) | GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 497) | GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 503) | GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 509) | GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 515) | GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 521) | GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 526) | GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 532) | GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 537) | GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 543) | GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 548) | GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 554) | GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 560) | GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 565) | GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 571) | GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 576) | GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 582) | GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 587) | GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 593) | GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 599) | GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 604) | GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 610) | GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 615) | GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 621) | GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 626) | GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 632) | GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 638) | GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 644) | GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 650) | GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 656) | GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 662) | GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 668) | GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 674) | GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 680) | GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 686) | GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 692) | GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 698) | GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 704) | GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 710) | GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 716) | GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 722) | GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 728) | GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 734) | GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 740) | GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 746) | GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 752) | GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 758) | GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) {
    function GLM_INLINE (line 763) | GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 768) | GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 773) | GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 779) | GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 784) | GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 789) | GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 795) | GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 800) | GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 806) | GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 812) | GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 817) | GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 822) | GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 828) | GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 833) | GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 838) | GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 844) | GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 849) | GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 855) | GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 861) | GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 866) | GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 872) | GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 877) | GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 883) | GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 888) | GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 894) | GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 900) | GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 906) | GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 912) | GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 918) | GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 924) | GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 929) | GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 934) | GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 940) | GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 945) | GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 950) | GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 956) | GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 961) | GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 967) | GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 973) | GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 978) | GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 983) | GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 989) | GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 994) | GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 999) | GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1005) | GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1010) | GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1016) | GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1022) | GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1027) | GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1033) | GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1038) | GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1044) | GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1049) | GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1055) | GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1061) | GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1067) | GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1073) | GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1079) | GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1085) | GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1090) | GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1096) | GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1101) | GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1107) | GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1112) | GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1118) | GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1124) | GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1129) | GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1135) | GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1140) | GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1146) | GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1151) | GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1157) | GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1163) | GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1168) | GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1174) | GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1179) | GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1185) | GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1190) | GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1196) | GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1202) | GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1208) | GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1214) | GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1220) | GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1226) | GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1232) | GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1238) | GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1244) | GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1250) | GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1256) | GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1262) | GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1268) | GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1274) | GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1280) | GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1286) | GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1292) | GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1298) | GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1304) | GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1310) | GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1316) | GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1322) | GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 1327) | GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1332) | GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1338) | GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 1343) | GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1348) | GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1354) | GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1359) | GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1365) | GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1371) | GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 1376) | GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1381) | GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1387) | GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 1392) | GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1397) | GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1403) | GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1408) | GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1414) | GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1420) | GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1425) | GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1431) | GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1436) | GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1442) | GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1447) | GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1453) | GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1459) | GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1465) | GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1471) | GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1477) | GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1483) | GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 1488) | GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1493) | GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1499) | GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 1504) | GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1509) | GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1515) | GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1520) | GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1526) | GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1532) | GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 1537) | GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1542) | GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1548) | GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {
    function GLM_INLINE (line 1553) | GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1558) | GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1564) | GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1569) | GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1575) | GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1581) | GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1586) | GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1592) | GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1597) | GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1603) | GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1608) | GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1614) | GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1620) | GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1626) | GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1632) | GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1638) | GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1644) | GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1649) | GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1655) | GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1660) | GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1666) | GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1671) | GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1677) | GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1683) | GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1688) | GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1694) | GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1699) | GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1705) | GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1710) | GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1716) | GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1722) | GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1727) | GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1733) | GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1738) | GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1744) | GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1749) | GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1755) | GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1761) | GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1767) | GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1773) | GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1779) | GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1785) | GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1791) | GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1797) | GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1803) | GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1809) | GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1815) | GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1821) | GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1827) | GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1833) | GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1839) | GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1845) | GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1851) | GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1857) | GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1863) | GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1869) | GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1875) | GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1881) | GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1886) | GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1892) | GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1897) | GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1903) | GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1908) | GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1914) | GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1920) | GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1925) | GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1931) | GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1936) | GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1942) | GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1947) | GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1953) | GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1959) | GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1964) | GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1970) | GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1975) | GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1981) | GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 1986) | GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1992) | GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 1998) | GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2004) | GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2010) | GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2016) | GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2022) | GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2027) | GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2033) | GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2038) | GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2044) | GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2049) | GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2055) | GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2061) | GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2066) | GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2072) | GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2077) | GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2083) | GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2088) | GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2094) | GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2100) | GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2105) | GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2111) | GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2116) | GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2122) | GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2127) | GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2133) | GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2139) | GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2145) | GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2151) | GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2157) | GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2163) | GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2168) | GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2174) | GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2179) | GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2185) | GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2190) | GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2196) | GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2202) | GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2207) | GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2213) | GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2218) | GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2224) | GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2229) | GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2235) | GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2241) | GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2246) | GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2252) | GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2257) | GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2263) | GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {
    function GLM_INLINE (line 2268) | GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2274) | GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2280) | GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2286) | GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2292) | GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2298) | GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2304) | GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2310) | GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2316) | GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2322) | GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2328) | GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2334) | GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2340) | GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2346) | GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2352) | GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2358) | GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2364) | GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2370) | GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2376) | GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2382) | GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2388) | GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2394) | GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2400) | GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2406) | GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2412) | GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2418) | GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2424) | GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2430) | GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2436) | GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2442) | GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2448) | GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2454) | GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2460) | GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2466) | GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2472) | GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2478) | GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2484) | GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2490) | GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2496) | GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2502) | GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2508) | GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2514) | GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2520) | GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2526) | GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2532) | GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2538) | GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2544) | GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2550) | GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2556) | GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2562) | GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2568) | GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2574) | GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2580) | GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2586) | GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2592) | GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2598) | GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2604) | GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2610) | GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2616) | GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2622) | GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2628) | GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2634) | GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2640) | GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2646) | GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2652) | GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2658) | GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2664) | GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2670) | GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2676) | GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2682) | GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2688) | GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2694) | GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2700) | GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2706) | GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2712) | GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2718) | GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2724) | GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2730) | GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2736) | GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2742) | GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2748) | GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2754) | GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2760) | GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2766) | GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2772) | GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {
    function GLM_INLINE (line 2778) | GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {

FILE: android/src/glm/gtx/vector_angle.hpp
  type glm (line 31) | namespace glm

FILE: android/src/glm/gtx/vector_query.hpp
  type glm (line 28) | namespace glm

FILE: android/src/glm/gtx/wrap.hpp
  type glm (line 29) | namespace glm

FILE: android/src/glm/integer.hpp
  type glm (line 23) | namespace glm

FILE: android/src/glm/matrix.hpp
  type glm (line 31) | namespace glm {
    type detail (line 32) | namespace detail
      type outerProduct_trait (line 35) | struct outerProduct_trait{}
      type outerProduct_trait<2, 2, T, Q> (line 38) | struct outerProduct_trait<2, 2, T, Q>
      type outerProduct_trait<2, 3, T, Q> (line 44) | struct outerProduct_trait<2, 3, T, Q>
      type outerProduct_trait<2, 4, T, Q> (line 50) | struct outerProduct_trait<2, 4, T, Q>
      type outerProduct_trait<3, 2, T, Q> (line 56) | struct outerProduct_trait<3, 2, T, Q>
      type outerProduct_trait<3, 3, T, Q> (line 62) | struct outerProduct_trait<3, 3, T, Q>
      type outerProduct_trait<3, 4, T, Q> (line 68) | struct outerProduct_trait<3, 4, T, Q>
      type outerProduct_trait<4, 2, T, Q> (line 74) | struct outerProduct_trait<4, 2, T, Q>
      type outerProduct_trait<4, 3, T, Q> (line 80) | struct outerProduct_trait<4, 3, T, Q>
      type outerProduct_trait<4, 4, T, Q> (line 86) | struct outerProduct_trait<4, 4, T, Q>

FILE: android/src/glm/packing.hpp
  type glm (line 22) | namespace glm

FILE: android/src/glm/simd/common.h
  function GLM_FUNC_QUALIFIER (line 10) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_add(glm_f32vec4 a, glm_f32vec4 b)
  function GLM_FUNC_QUALIFIER (line 15) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_add(glm_f32vec4 a, glm_f32vec4 b)
  function GLM_FUNC_QUALIFIER (line 20) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sub(glm_f32vec4 a, glm_f32vec4 b)
  function GLM_FUNC_QUALIFIER (line 25) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sub(glm_f32vec4 a, glm_f32vec4 b)
  function GLM_FUNC_QUALIFIER (line 30) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_mul(glm_f32vec4 a, glm_f32vec4 b)
  function GLM_FUNC_QUALIFIER (line 35) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_mul(glm_f32vec4 a, glm_f32vec4 b)
  function GLM_FUNC_QUALIFIER (line 40) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div(glm_f32vec4 a, glm_f32vec4 b)
  function GLM_FUNC_QUALIFIER (line 45) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_div(glm_f32vec4 a, glm_f32vec4 b)
  function GLM_FUNC_QUALIFIER (line 50) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div_lowp(glm_f32vec4 a, glm_f32v...
  function GLM_FUNC_QUALIFIER (line 55) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_swizzle_xyzw(glm_f32vec4 a)
  function GLM_FUNC_QUALIFIER (line 64) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_fma(glm_f32vec4 a, glm_f32vec4 b...
  function GLM_FUNC_QUALIFIER (line 73) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_fma(glm_f32vec4 a, glm_f32vec4 b...
  function GLM_FUNC_QUALIFIER (line 82) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_abs(glm_f32vec4 x)
  function GLM_FUNC_QUALIFIER (line 87) | GLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x)
  function GLM_FUNC_QUALIFIER (line 99) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 110) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 124) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 145) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 155) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 168) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 175) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y)
  function GLM_FUNC_QUALIFIER (line 184) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, ...
  function GLM_FUNC_QUALIFIER (line 191) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_v...
  function GLM_FUNC_QUALIFIER (line 199) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 205) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4...
  function GLM_FUNC_QUALIFIER (line 219) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 233) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x)

FILE: android/src/glm/simd/exponential.h
  function GLM_FUNC_QUALIFIER (line 10) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sqrt_lowp(glm_f32vec4 x)
  function GLM_FUNC_QUALIFIER (line 15) | GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sqrt_lowp(glm_f32vec4 x)

FILE: android/src/glm/simd/geometric.h
  function GLM_FUNC_QUALIFIER (line 13) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x)
  function GLM_FUNC_QUALIFIER (line 20) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1)
  function GLM_FUNC_QUALIFIER (line 27) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2)
  function GLM_FUNC_QUALIFIER (line 46) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2)
  function GLM_FUNC_QUALIFIER (line 65) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2)
  function GLM_FUNC_QUALIFIER (line 77) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v)
  function GLM_FUNC_QUALIFIER (line 85) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I,...
  function GLM_FUNC_QUALIFIER (line 94) | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N)
  function GLM_FUNC_QUALIFIER (line 103) | GLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_v...

FILE: android/src/glm/simd/integer.h
  function GLM_FUNC_QUALIFIER (line 8) | GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x)
  function GLM_FUNC_QUALIFIER (line 62) | GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y)

FILE: android/src/glm/simd/matrix.h
  function GLM_FUNC_QUALIFIER (line 10) | GLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], g...
  function GLM_FUNC_QUALIFIER (line 18) | GLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 con...
  function GLM_FUNC_QUALIFIER (line 26) | GLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 con...
  function GLM_FUNC_QUALIFIER (line 34) | GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_v...
  function GLM_FUNC_QUALIFIER (line 53) | GLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m...
  function GLM_FUNC_QUALIFIER (line 80) | GLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 con...
  function GLM_FUNC_QUALIFIER (line 156) | GLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec...
  function GLM_FUNC_QUALIFIER (line 169) | GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in...
  function GLM_FUNC_QUALIFIER (line 383) | GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4])
  function GLM_FUNC_QUALIFIER (line 446) | GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4])
  function GLM_FUNC_QUALIFIER (line 509) | GLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 ...
  function GLM_FUNC_QUALIFIER (line 730) | GLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_...
  function GLM_FUNC_QUALIFIER (line 1020) | GLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const& c, __m128 co...

FILE: android/src/glm/simd/neon.h
  function namespace (line 9) | namespace glm {

FILE: android/src/glm/simd/platform.h
  type __m128 (line 371) | typedef __m128			glm_f32vec4;
  type __m128i (line 372) | typedef __m128i			glm_i32vec4;
  type __m128i (line 373) | typedef __m128i			glm_u32vec4;
  type __m128d (line 374) | typedef __m128d			glm_f64vec2;
  type __m128i (line 375) | typedef __m128i			glm_i64vec2;
  type __m128i (line 376) | typedef __m128i			glm_u64vec2;
  type glm_f32vec4 (line 378) | typedef glm_f32vec4		glm_vec4;
  type glm_i32vec4 (line 379) | typedef glm_i32vec4		glm_ivec4;
  type glm_u32vec4 (line 380) | typedef glm_u32vec4		glm_uvec4;
  type glm_f64vec2 (line 381) | typedef glm_f64vec2		glm_dvec2;
  type __m256d (line 385) | typedef __m256d			glm_f64vec4;
  type glm_f64vec4 (line 386) | typedef glm_f64vec4		glm_dvec4;
  type __m256i (line 390) | typedef __m256i			glm_i64vec4;
  type __m256i (line 391) | typedef __m256i			glm_u64vec4;
  type float32x4_t (line 395) | typedef float32x4_t			glm_f32vec4;
  type int32x4_t (line 396) | typedef int32x4_t			glm_i32vec4;
  type uint32x4_t (line 397) | typedef uint32x4_t			glm_u32vec4;

FILE: android/src/glm/trigonometric.hpp
  type glm (line 24) | namespace glm

FILE: android/src/glm/vector_relational.hpp
  type glm (line 25) | namespace glm

FILE: android/src/main/java/com/example/flutter_opengl/FlutterOpenglPlugin.java
  class FlutterOpenglPlugin (line 21) | public class FlutterOpenglPlugin implements FlutterPlugin, MethodCallHan...
    method nativeSetSurface (line 27) | public static native void nativeSetSurface(Surface surface, int width,...
    method getDouble (line 40) | private double getDouble(Object obj) {
    method getInt (line 46) | private int getInt(Object obj) {
    method getBoolean (line 52) | private int getBoolean(Object obj) {
    method getString (line 58) | private String getString(Object obj) {
    method onAttachedToEngine (line 64) | @Override
    method onMethodCall (line 71) | @Override
    method onDetachedFromEngine (line 107) | @Override

FILE: example/android/app/src/main/java/com/example/flutter_opengl_example/MainActivity.java
  class MainActivity (line 5) | public class MainActivity extends FlutterActivity {

FILE: example/lib/controls/ShaderButtons.dart
  class ShaderButtons (line 14) | class ShaderButtons extends ConsumerWidget {
    method build (line 20) | Widget build(BuildContext context, WidgetRef ref)

FILE: example/lib/controls/controls.dart
  class Controls (line 17) | class Controls extends ConsumerWidget {
    method build (line 25) | Widget build(BuildContext context, WidgetRef ref)

FILE: example/lib/controls/texture_chooser.dart
  class TextureChooser (line 10) | class TextureChooser extends ConsumerWidget {
    method build (line 16) | Widget build(BuildContext context, WidgetRef ref)
  class TextureWidget (line 31) | class TextureWidget extends ConsumerWidget {
    method build (line 44) | Widget build(BuildContext context, WidgetRef ref)
    method _items (line 165) | List<Widget> _items(WidgetRef ref)
  class Item (line 223) | class Item extends ConsumerWidget {
    method build (line 264) | Widget build(BuildContext context, WidgetRef ref)

FILE: example/lib/controls/texture_sizes.dart
  class TextureSize (line 9) | class TextureSize extends ConsumerWidget {
    method build (line 15) | Widget build(BuildContext context, WidgetRef ref)

FILE: example/lib/edit_shader.dart
  class EditShader (line 15) | class EditShader extends StatelessWidget {
    method build (line 21) | Widget build(BuildContext context)

FILE: example/lib/main.dart
  function main (line 4) | void main()
  class MyApp (line 11) | class MyApp extends StatelessWidget {
    method build (line 81) | Widget build(BuildContext context)

FILE: example/lib/main_in_deep.dart
  function main (line 15) | void main()
  class MyApp (line 20) | class MyApp extends StatelessWidget {
    method build (line 24) | Widget build(BuildContext context)
  class TextureAndTabs (line 35) | class TextureAndTabs extends ConsumerWidget {
    method build (line 41) | Widget build(BuildContext context, WidgetRef ref)
  class UpperText (line 123) | class UpperText extends ConsumerWidget {
    method build (line 129) | Widget build(BuildContext context, WidgetRef ref)

FILE: example/lib/shader_widget.dart
  class ShaderWidget (line 12) | class ShaderWidget extends StatefulWidget {
    method createState (line 23) | State<ShaderWidget> createState()
  class _ShaderWidgetState (line 26) | class _ShaderWidgetState extends State<ShaderWidget> {
    method build (line 31) | Widget build(BuildContext context)
  class RendererWidget (line 65) | class RendererWidget extends StatelessWidget {
    method build (line 76) | Widget build(BuildContext context)

FILE: example/lib/states.dart
  type TextureFilter (line 23) | enum TextureFilter {
  type TextureWrap (line 29) | enum TextureWrap {
  class TextureParams (line 34) | class TextureParams {
    method copyWith (line 47) | TextureParams copyWith({

FILE: example/lib/test_widget.dart
  class TestWidget (line 8) | class TestWidget extends StatelessWidget {
    method build (line 18) | Widget build(BuildContext context)

FILE: example/linux/flutter/generated_plugin_registrant.cc
  function fl_register_plugins (line 12) | void fl_register_plugins(FlPluginRegistry* registry) {

FILE: example/linux/main.cc
  function main (line 3) | int main(int argc, char** argv) {

FILE: example/linux/my_application.cc
  type _MyApplication (line 10) | struct _MyApplication {
  function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
  function gboolean (line 66) | static gboolean my_application_local_command_line(GApplication* applicat...
  function my_application_dispose (line 85) | static void my_application_dispose(GObject* object) {
  function my_application_class_init (line 91) | static void my_application_class_init(MyApplicationClass* klass) {
  function my_application_init (line 97) | static void my_application_init(MyApplication* self) {}
  function MyApplication (line 99) | MyApplication* my_application_new() {

FILE: example/test/widget_test.dart
  function main (line 13) | void main()

FILE: example/windows/flutter/generated_plugin_registrant.cc
  function RegisterPlugins (line 13) | void RegisterPlugins(flutter::PluginRegistry* registry) {

FILE: example/windows/runner/flutter_window.cpp
  function LRESULT (line 40) | LRESULT

FILE: example/windows/runner/flutter_window.h
  function class (line 12) | class FlutterWindow : public Win32Window {

FILE: example/windows/runner/main.cpp
  function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,

FILE: example/windows/runner/utils.cpp
  function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
  function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
  function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {

FILE: example/windows/runner/win32_window.cpp
  function Scale (line 18) | int Scale(int source, double scale_factor) {
  function EnableFullDpiSupportIfAvailable (line 24) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
  class WindowClassRegistrar (line 41) | class WindowClassRegistrar {
    method WindowClassRegistrar (line 46) | static WindowClassRegistrar* GetInstance() {
    method WindowClassRegistrar (line 62) | WindowClassRegistrar() = default;
  function wchar_t (line 71) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
  function LRESULT (line 133) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
  function LRESULT (line 152) | LRESULT
  function Win32Window (line 208) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
  function RECT (line 224) | RECT Win32Window::GetClientArea() {
  function HWND (line 230) | HWND Win32Window::GetHandle() {

FILE: example/windows/runner/win32_window.h
  type Size (line 21) | struct Size {

FILE: lib/src/flutter_opengl.dart
  class FlutterOpengl (line 3) | class FlutterOpengl {
    method createSurface (line 6) | Future<int> createSurface(int width, int height)

FILE: lib/src/flutter_opengl_ffi.dart
  type PointerEventType (line 7) | enum PointerEventType {
  type UniformType (line 13) | enum UniformType {
  class FlutterOpenGLFfi (line 27) | class FlutterOpenGLFfi {
    method rendererStatus (line 45) | bool rendererStatus()
    method getTextureSize (line 57) | Size getTextureSize()
    method startThread (line 79) | void startThread()
    method stopThread (line 90) | void stopThread()
    method setShader (line 107) | String setShader(
    method setShaderToy (line 141) | String setShaderToy(String fragmentShader)
    method getVertexShader (line 157) | String getVertexShader()
    method getFragmentShader (line 171) | String getFragmentShader()
    method addShaderToyUniforms (line 190) | void addShaderToyUniforms()
    method setMousePosition (line 214) | void setMousePosition(
    method getFps (line 244) | double getFps()
    method setClearColor (line 254) | void setClearColor(
    method addBoolUniform (line 281) | bool addBoolUniform(String name, bool val)
    method addIntUniform (line 295) | bool addIntUniform(String name, int val)
    method addFloatUniform (line 309) | bool addFloatUniform(String name, double val)
    method addVec2Uniform (line 323) | bool addVec2Uniform(String name, List<double> val)
    method addVec3Uniform (line 343) | bool addVec3Uniform(String name, List<double> val)
    method addVec4Uniform (line 363) | bool addVec4Uniform(String name, List<double> val)
    method addMat2Uniform (line 383) | bool addMat2Uniform(String name, List<double> val)
    method addMat3Uniform (line 403) | bool addMat3Uniform(String name, List<double> val)
    method addMat4Uniform (line 423) | bool addMat4Uniform(String name, List<double> val)
    method removeUniform (line 451) | bool removeUniform(String name)
    method addSampler2DUniform (line 468) | bool addSampler2DUniform(
    method replaceSampler2DUniform (line 505) | bool replaceSampler2DUniform(
    method setBoolUniform (line 541) | bool setBoolUniform(String name, bool val)
    method setIntUniform (line 554) | bool setIntUniform(String name, int val)
    method setFloatUniform (line 567) | bool setFloatUniform(String name, double val)
    method setVec2Uniform (line 580) | bool setVec2Uniform(String name, List<double> val)
    method setVec3Uniform (line 594) | bool setVec3Uniform(String name, List<double> val)
    method setVec4Uniform (line 609) | bool setVec4Uniform(String name, List<double> val)
    method setMat2Uniform (line 625) | bool setMat2Uniform(String name, List<double> val)
    method setMat3Uniform (line 641) | bool setMat3Uniform(String name, List<double> val)
    method setMat4Uniform (line 662) | bool setMat4Uniform(String name, List<double> val)
    method setSampler2DUniform (line 690) | bool setSampler2DUniform(String name, Uint8List val)
    method startCaptureOnSampler2D (line 719) | bool startCaptureOnSampler2D(String name, String completeFilePath)
    method stopCapture (line 736) | bool stopCapture()

FILE: lib/src/flutter_opengl_method_channel.dart
  class MethodChannelFlutterOpengl (line 7) | class MethodChannelFlutterOpengl extends FlutterOpenglPlatform {
    method createSurface (line 13) | Future<int> createSurface(int width, int height)

FILE: lib/src/flutter_opengl_platform_interface.dart
  class FlutterOpenglPlatform (line 5) | abstract class FlutterOpenglPlatform extends PlatformInterface {
    method createSurface (line 28) | Future<int> createSurface(int width, int height)

FILE: lib/src/ogl_utils.dart
  class CapturedWidget (line 13) | class CapturedWidget {
  type AddMethod (line 20) | enum AddMethod {
  class OGLUtils (line 31) | class OGLUtils {
    method captureWidget (line 33) | Future<CapturedWidget> captureWidget(GlobalKey widgetKey)
    method setAssetTexture (line 54) | Future<bool> setAssetTexture(String uniformName, String assetName,

FILE: lib/src/opengl_controller.dart
  class OpenGLController (line 8) | class OpenGLController {

FILE: lib/src/opengl_texture.dart
  class OpenGLTexture (line 41) | class OpenGLTexture extends StatelessWidget {
    method build (line 52) | Widget build(BuildContext context)

FILE: linux/fl_my_texture_gl.cc
  function gboolean (line 10) | static gboolean fl_my_texture_gl_populate(FlTextureGL *texture,
  function FlMyTextureGL (line 26) | FlMyTextureGL *fl_my_texture_gl_new(uint32_t target,
  function fl_my_texture_gl_class_init (line 39) | static void fl_my_texture_gl_class_init(
  function fl_my_texture_gl_init (line 46) | static void fl_my_texture_gl_init(FlMyTextureGL *self)

FILE: linux/flutter_opengl_plugin.cc
  function flutter_opengl_plugin_handle_method_call (line 28) | static void flutter_opengl_plugin_handle_method_call(
  function flutter_opengl_plugin_dispose (line 110) | static void flutter_opengl_plugin_dispose(GObject *object)
  function flutter_opengl_plugin_class_init (line 115) | static void flutter_opengl_plugin_class_init(FlutterOpenglPluginClass *k...
  function flutter_opengl_plugin_init (line 120) | static void flutter_opengl_plugin_init(FlutterOpenglPlugin *self) {}
  function method_call_cb (line 122) | static void method_call_cb(FlMethodChannel *channel, FlMethodCall *metho...
  function flutter_opengl_plugin_register_with_registrar (line 129) | void flutter_opengl_plugin_register_with_registrar(FlPluginRegistrar *re...

FILE: linux/include/fl_my_texture_gl.h
  type _FlMyTextureGL (line 16) | struct _FlMyTextureGL
  type _FlutterOpenglPlugin (line 30) | struct _FlutterOpenglPlugin

FILE: linux/include/flutter_opengl/flutter_opengl_plugin.h
  type FlutterOpenglPlugin (line 14) | typedef struct _FlutterOpenglPlugin FlutterOpenglPlugin;
  type FlutterOpenglPluginClass (line 15) | typedef struct {

FILE: linux/test.cpp
  function eglTest (line 22) | void eglTest(EGLDisplay egl_display)
  function drawFrame (line 311) | void drawFrame(FlutterOpenglPlugin *self) {
  function main2 (line 326) | void main2(FlutterOpenglPlugin *self, int width, int height) {
  function GLint (line 486) | GLint common_get_shader_program(const char *vertex_shader_source, const ...
  function GLuint (line 588) | GLuint createRenderTarget(uint16_t const width, uint16_t const height)
  function GLuint (line 616) | GLuint createRenderTargetTexture(FlutterOpenglPlugin *self, uint16_t con...
  function cs (line 659) | static void cs(GLuint p, GLenum type, const char *src)
  function mainFBO3 (line 667) | void mainFBO3(FlutterOpenglPlugin *self, int width, int height) {
  function mainFBO4 (line 712) | void mainFBO4(FlutterOpenglPlugin *self, int width, int height) {
  function mainFBO5 (line 784) | void mainFBO5(FlutterOpenglPlugin *self, int width, int height) {
  function mainFBO2 (line 803) | void mainFBO2(FlutterOpenglPlugin *self, int width, int height) {
  function mainFBO (line 864) | void mainFBO(FlutterOpenglPlugin *self, int width, int height) {
  function testRandomTexture (line 960) | void testRandomTexture(FlutterOpenglPlugin *self, int width, int height) {

FILE: src/Renderer.cpp
  function GLint (line 188) | GLint Renderer::setPixelFormat()
  function OpenCVCapture (line 276) | OpenCVCapture *Renderer::getOpenCVCapture()

FILE: src/Renderer.h
  function class (line 33) | class Renderer {

FILE: src/Sampler2D.h
  function class (line 9) | class Sampler2D {

FILE: src/Shader.cpp
  function eglPrintError (line 11) | void eglPrintError(const std::string &note) {
  function replaceAll (line 70) | void replaceAll(std::string& src, const std::string& search,
  function GLuint (line 281) | GLuint Shader::loadShader(GLenum shaderType, const char *shaderSource) {
  function GLuint (line 311) | GLuint Shader::createProgram(const char *vertexSource, const char *fragm...

FILE: src/Shader.h
  function class (line 44) | class Shader {

FILE: src/common.h
  type OpenglPluginContext (line 26) | typedef struct flutter_opengl_plugin_context {
  type OpenglPluginContext (line 61) | typedef struct flutter_opengl_plugin_context
  type OpenglPluginContext (line 87) | typedef struct flutter_opengl_plugin_context

FILE: src/ffi.cpp
  function deleteRenderer (line 16) | void deleteRenderer() {
  function createRenderer (line 31) | void createRenderer(OpenglPluginContext *textureStruct) {
  function Renderer (line 36) | Renderer *getRenderer() { return renderer; }
  function FFI_PLUGIN_EXPORT (line 38) | FFI_PLUGIN_EXPORT bool rendererStatus() {
  function FFI_PLUGIN_EXPORT (line 43) | FFI_PLUGIN_EXPORT void getTextureSize(int32_t *width, int32_t *height) {
  function FFI_PLUGIN_EXPORT (line 56) | FFI_PLUGIN_EXPORT void
  function FFI_PLUGIN_EXPORT (line 70) | FFI_PLUGIN_EXPORT void
  function FFI_PLUGIN_EXPORT (line 85) | FFI_PLUGIN_EXPORT const char *
  function FFI_PLUGIN_EXPORT (line 102) | FFI_PLUGIN_EXPORT const char *
  function FFI_PLUGIN_EXPORT (line 116) | FFI_PLUGIN_EXPORT const char *
  function FFI_PLUGIN_EXPORT (line 129) | FFI_PLUGIN_EXPORT const char *
  function FFI_PLUGIN_EXPORT (line 143) | FFI_PLUGIN_EXPORT void
  function FFI_PLUGIN_EXPORT (line 166) | FFI_PLUGIN_EXPORT void
  function FFI_PLUGIN_EXPORT (line 203) | FFI_PLUGIN_EXPORT double
  function FFI_PLUGIN_EXPORT (line 218) | FFI_PLUGIN_EXPORT bool
  function FFI_PLUGIN_EXPORT (line 237) | FFI_PLUGIN_EXPORT bool
  function FFI_PLUGIN_EXPORT (line 252) | FFI_PLUGIN_EXPORT bool
  function FFI_PLUGIN_EXPORT (line 271) | FFI_PLUGIN_EXPORT bool
  function FFI_PLUGIN_EXPORT (line 297) | FFI_PLUGIN_EXPORT bool
  function FFI_PLUGIN_EXPORT (line 320) | FFI_PLUGIN_EXPORT bool
  function FFI_PLUGIN_EXPORT (line 349) | FFI_PLUGIN_EXPORT bool

FILE: src/ndk/ndk.cpp
  function setVM (line 10) | void setVM(JavaVM *vm) {
  function setFlutterEnvironment (line 14) | bool setFlutterEnvironment() {
  function jint (line 21) | jint JNI_OnLoad(JavaVM *vm, void *reserved) {

FILE: src/opencv_capture.h
  type CameraMsg (line 13) | enum CameraMsg {
  function class (line 19) | class OpenCVCapture {

FILE: src/uniformQueue.cpp
  function Sampler2D (line 398) | Sampler2D *UniformQueue::getSampler2D(const std::string &name)

FILE: src/uniformQueue.h
  type UniformType (line 41) | typedef enum {
  function class (line 54) | class UniformQueue {

FILE: test/flutter_opengl_method_channel_test.dart
  function main (line 5) | void main()

FILE: test/flutter_opengl_test.dart
  function main (line 13) | void main()

FILE: windows/fl_my_texture_gl.h
  function class (line 10) | class FlMyTextureGL
  type user_release_context (line 37) | typedef struct {

FILE: windows/flutter_opengl_plugin.cpp
  type flutter_opengl (line 26) | namespace flutter_opengl {
    function GLint (line 28) | GLint MySetPixelFormat()
    function initGL (line 87) | void initGL()

FILE: windows/flutter_opengl_plugin.h
  function namespace (line 9) | namespace flutter_opengl {

FILE: windows/flutter_opengl_plugin_c_api.cpp
  function FlutterOpenglPluginCApiRegisterWithRegistrar (line 7) | void FlutterOpenglPluginCApiRegisterWithRegistrar(
Condensed preview — 580 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,787K chars).
[
  {
    "path": ".gitignore",
    "chars": 690,
    "preview": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\nmigrate_working_dir/\n\n# IntelliJ re"
  },
  {
    "path": ".metadata",
    "chars": 1525,
    "preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
  },
  {
    "path": ".vscode/c_cpp_properties.json",
    "chars": 1299,
    "preview": "{\n    \"configurations\": [\n        {\n            \"name\": \"Linux\",\n            \"includePath\": [\n                \"${workspa"
  },
  {
    "path": ".vscode/extensions.json",
    "chars": 137,
    "preview": "{\n    \"recommendations\": [\n        \"ms-vscode.cpptools\",\n        \"ms-vscode.cpptools-extension-pack\",\n        \"Dart-Code"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 2477,
    "preview": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 2809,
    "preview": "{\n    \"cmake.sourceDirectory\": \"${workspaceFolder}/linux\",\n    \"cmake.configureOnOpen\": true,\n    \"files.associations\": "
  },
  {
    "path": ".vscode/tasks.json",
    "chars": 1091,
    "preview": "{\n    \"version\": \"2.0.0\",\n    \"tasks\": [\n        {\n            \"label\": \"compile linux debug verbose\",\n            \"comm"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 64,
    "preview": "## 0.9.0\n\nCode rewritten. Support for Android, Linux and Windows"
  },
  {
    "path": "LICENSE",
    "chars": 583,
    "preview": "Copyright 2019 Marco Bavagnoli <marco.bavagnoli@gmail.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License"
  },
  {
    "path": "README.md",
    "chars": 8736,
    "preview": "# flutter_opengl\n\nA Flutter OpenGL ES plugin using a Texture() widget. Supports Android, Linux and Windows. Many shaders"
  },
  {
    "path": "SCRIPTS/setupOpenCV-android.sh",
    "chars": 309,
    "preview": "#!/bin/bash\n\nwget https://github.com/opencv/opencv/releases/download/4.7.0/opencv-4.7.0-android-sdk.zip\n\nunzip opencv-4."
  },
  {
    "path": "analysis_options.yaml",
    "chars": 154,
    "preview": "include: package:flutter_lints/flutter.yaml\n\n# Additional information about this file can be found at\n# https://dart.dev"
  },
  {
    "path": "android/.gitignore",
    "chars": 102,
    "preview": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.cxx\n"
  },
  {
    "path": "android/CMakeLists.txt",
    "chars": 3849,
    "preview": "# For more information about using CMake with Android Studio, read the\n# documentation: https://d.android.com/studio/pro"
  },
  {
    "path": "android/build.gradle",
    "chars": 1764,
    "preview": "group 'com.example.flutter_opengl'\nversion '1.0'\n\nbuildscript {\n    repositories {\n        google()\n        mavenCentral"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "chars": 200,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "android/gradlew",
    "chars": 8047,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android/gradlew.bat",
    "chars": 2674,
    "preview": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \""
  },
  {
    "path": "android/proguard-rules.pro",
    "chars": 361,
    "preview": "#Flutter Wrapper\n-keep class io.flutter.app.** { *; }\n-keep class io.flutter.plugin.**  { *; }\n-keep class io.flutter.ut"
  },
  {
    "path": "android/settings.gradle",
    "chars": 36,
    "preview": "rootProject.name = 'flutter_opengl'\n"
  },
  {
    "path": "android/src/glm/CMakeLists.txt",
    "chars": 2668,
    "preview": "file(GLOB ROOT_SOURCE *.cpp)\nfile(GLOB ROOT_INLINE *.inl)\nfile(GLOB ROOT_HEADER *.hpp)\nfile(GLOB ROOT_TEXT ../*.txt)\nfil"
  },
  {
    "path": "android/src/glm/common.hpp",
    "chars": 27618,
    "preview": "/// @ref core\n/// @file glm/common.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">"
  },
  {
    "path": "android/src/glm/detail/_features.hpp",
    "chars": 11376,
    "preview": "#pragma once\n\n// #define GLM_CXX98_EXCEPTIONS\n// #define GLM_CXX98_RTTI\n\n// #define GLM_CXX11_RVALUE_REFERENCES\n// Rvalu"
  },
  {
    "path": "android/src/glm/detail/_fixes.hpp",
    "chars": 380,
    "preview": "#include <cmath>\n\n//! Workaround for compatibility with other libraries\n#ifdef max\n#undef max\n#endif\n\n//! Workaround for"
  },
  {
    "path": "android/src/glm/detail/_noise.hpp",
    "chars": 2279,
    "preview": "#pragma once\n\n#include \"../common.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T mo"
  },
  {
    "path": "android/src/glm/detail/_swizzle.hpp",
    "chars": 48409,
    "preview": "#pragma once\n\nnamespace glm{\nnamespace detail\n{\n\t// Internal class for implementing swizzle operators\n\ttemplate<typename"
  },
  {
    "path": "android/src/glm/detail/_swizzle_func.hpp",
    "chars": 34337,
    "preview": "#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"
  },
  {
    "path": "android/src/glm/detail/_vectorize.hpp",
    "chars": 5346,
    "preview": "#pragma once\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, lengt"
  },
  {
    "path": "android/src/glm/detail/compute_common.hpp",
    "chars": 1192,
    "preview": "#pragma once\n\n#include \"setup.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename genFIType, bo"
  },
  {
    "path": "android/src/glm/detail/compute_vector_relational.hpp",
    "chars": 600,
    "preview": "#pragma once\n\n//#include \"compute_common.hpp\"\n#include \"setup.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n"
  },
  {
    "path": "android/src/glm/detail/func_common.inl",
    "chars": 24608,
    "preview": "/// @ref core\n/// @file glm/detail/func_common.inl\n\n#include \"../vector_relational.hpp\"\n#include \"compute_common.hpp\"\n#i"
  },
  {
    "path": "android/src/glm/detail/func_common_simd.inl",
    "chars": 6004,
    "preview": "/// @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"
  },
  {
    "path": "android/src/glm/detail/func_exponential.inl",
    "chars": 4348,
    "preview": "/// @ref core\n/// @file glm/detail/func_exponential.inl\n\n#include \"../vector_relational.hpp\"\n#include \"_vectorize.hpp\"\n#"
  },
  {
    "path": "android/src/glm/detail/func_exponential_simd.inl",
    "chars": 813,
    "preview": "/// @ref core\n/// @file glm/detail/func_exponential_simd.inl\n\n#include \"../simd/exponential.h\"\n\n#if GLM_ARCH & GLM_ARCH_"
  },
  {
    "path": "android/src/glm/detail/func_geometric.inl",
    "chars": 7451,
    "preview": "#include \"../exponential.hpp\"\n#include \"../common.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename"
  },
  {
    "path": "android/src/glm/detail/func_geometric_simd.inl",
    "chars": 4116,
    "preview": "/// @ref core\n/// @file glm/detail/func_geometric_simd.inl\n\n#include \"../simd/geometric.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2"
  },
  {
    "path": "android/src/glm/detail/func_integer.inl",
    "chars": 14994,
    "preview": "/// @ref core\n\n#include \"_vectorize.hpp\"\n#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)\n#\tinclude <intri"
  },
  {
    "path": "android/src/glm/detail/func_integer_simd.inl",
    "chars": 1634,
    "preview": "#include \"../simd/integer.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>"
  },
  {
    "path": "android/src/glm/detail/func_matrix.inl",
    "chars": 12732,
    "preview": "#include \"../geometric.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t C, length_t R, typen"
  },
  {
    "path": "android/src/glm/detail/func_matrix_simd.inl",
    "chars": 8563,
    "preview": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#include \"type_mat4x4.hpp\"\n#include \"../geometric.hpp\"\n#include \"../simd/matrix.h\"\n#in"
  },
  {
    "path": "android/src/glm/detail/func_packing.inl",
    "chars": 2951,
    "preview": "/// @ref core\n/// @file glm/detail/func_packing.inl\n\n#include \"../common.hpp\"\n#include \"type_half.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/detail/func_packing_simd.inl",
    "chars": 72,
    "preview": "namespace glm{\nnamespace detail\n{\n\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "android/src/glm/detail/func_trigonometric.inl",
    "chars": 5216,
    "preview": "#include \"_vectorize.hpp\"\n#include <cmath>\n#include <limits>\n\nnamespace glm\n{\n\t// radians\n\ttemplate<typename genType>\n\tG"
  },
  {
    "path": "android/src/glm/detail/func_trigonometric_simd.inl",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "android/src/glm/detail/func_vector_relational.inl",
    "chars": 2408,
    "preview": "namespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> lessTha"
  },
  {
    "path": "android/src/glm/detail/func_vector_relational_simd.inl",
    "chars": 72,
    "preview": "namespace glm{\nnamespace detail\n{\n\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "android/src/glm/detail/glm.cpp",
    "chars": 8465,
    "preview": "/// @ref core\n/// @file glm/glm.cpp\n\n#ifndef GLM_ENABLE_EXPERIMENTAL\n#define GLM_ENABLE_EXPERIMENTAL\n#endif\n#include <gl"
  },
  {
    "path": "android/src/glm/detail/qualifier.hpp",
    "chars": 5896,
    "preview": "#pragma once\n\n#include \"setup.hpp\"\n\nnamespace glm\n{\n\t/// Qualify GLM types in term of alignment (packed, aligned) and pr"
  },
  {
    "path": "android/src/glm/detail/setup.hpp",
    "chars": 39453,
    "preview": "#ifndef GLM_SETUP_INCLUDED\n\n#include <cassert>\n#include <cstddef>\n\n#define GLM_VERSION_MAJOR\t\t\t0\n#define GLM_VERSION_MIN"
  },
  {
    "path": "android/src/glm/detail/type_float.hpp",
    "chars": 1574,
    "preview": "#pragma once\n\n#include \"setup.hpp\"\n\n#if GLM_COMPILER == GLM_COMPILER_VC12\n#\tpragma warning(push)\n#\tpragma warning(disabl"
  },
  {
    "path": "android/src/glm/detail/type_half.hpp",
    "chars": 254,
    "preview": "#pragma once\n\n#include \"setup.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttypedef short hdata;\n\n\tGLM_FUNC_DECL float toFloa"
  },
  {
    "path": "android/src/glm/detail/type_half.inl",
    "chars": 4513,
    "preview": "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"
  },
  {
    "path": "android/src/glm/detail/type_mat2x2.hpp",
    "chars": 6154,
    "preview": "/// @ref core\n/// @file glm/detail/type_mat2x2.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include <limits>\n#include <c"
  },
  {
    "path": "android/src/glm/detail/type_mat2x2.inl",
    "chars": 13967,
    "preview": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\tt"
  },
  {
    "path": "android/src/glm/detail/type_mat2x3.hpp",
    "chars": 5296,
    "preview": "/// @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#inc"
  },
  {
    "path": "android/src/glm/detail/type_mat2x3.inl",
    "chars": 13443,
    "preview": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualif"
  },
  {
    "path": "android/src/glm/detail/type_mat2x4.hpp",
    "chars": 5355,
    "preview": "/// @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#inc"
  },
  {
    "path": "android/src/glm/detail/type_mat2x4.inl",
    "chars": 14160,
    "preview": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualif"
  },
  {
    "path": "android/src/glm/detail/type_mat3x2.hpp",
    "chars": 5381,
    "preview": "/// @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#inc"
  },
  {
    "path": "android/src/glm/detail/type_mat3x2.inl",
    "chars": 14505,
    "preview": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualif"
  },
  {
    "path": "android/src/glm/detail/type_mat3x3.hpp",
    "chars": 6331,
    "preview": "/// @ref core\n/// @file glm/detail/type_mat3x3.hpp\n\n#pragma once\n\n#include \"type_vec3.hpp\"\n#include <limits>\n#include <c"
  },
  {
    "path": "android/src/glm/detail/type_mat3x3.inl",
    "chars": 17188,
    "preview": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\tt"
  },
  {
    "path": "android/src/glm/detail/type_mat3x4.hpp",
    "chars": 5534,
    "preview": "/// @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#inc"
  },
  {
    "path": "android/src/glm/detail/type_mat3x4.inl",
    "chars": 16913,
    "preview": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualif"
  },
  {
    "path": "android/src/glm/detail/type_mat4x2.hpp",
    "chars": 5505,
    "preview": "/// @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#inc"
  },
  {
    "path": "android/src/glm/detail/type_mat4x2.inl",
    "chars": 16416,
    "preview": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualif"
  },
  {
    "path": "android/src/glm/detail/type_mat4x3.hpp",
    "chars": 5811,
    "preview": "/// @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#inc"
  },
  {
    "path": "android/src/glm/detail/type_mat4x3.inl",
    "chars": 17969,
    "preview": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualif"
  },
  {
    "path": "android/src/glm/detail/type_mat4x4.hpp",
    "chars": 6834,
    "preview": "/// @ref core\n/// @file glm/detail/type_mat4x4.hpp\n\n#pragma once\n\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <c"
  },
  {
    "path": "android/src/glm/detail/type_mat4x4.inl",
    "chars": 25342,
    "preview": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\tt"
  },
  {
    "path": "android/src/glm/detail/type_mat4x4_simd.inl",
    "chars": 49,
    "preview": "/// @ref core\n\nnamespace glm\n{\n\n}//namespace glm\n"
  },
  {
    "path": "android/src/glm/detail/type_quat.hpp",
    "chars": 5960,
    "preview": "/// @ref core\n/// @file glm/detail/type_quat.hpp\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_mat3x3.hpp\"\n#inc"
  },
  {
    "path": "android/src/glm/detail/type_quat.inl",
    "chars": 11495,
    "preview": "#include \"../trigonometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"../ext/quaternion_geometric.hpp\"\n#include <limit"
  },
  {
    "path": "android/src/glm/detail/type_quat_simd.inl",
    "chars": 5976,
    "preview": "/// @ref core\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n/*\n\ttemplate<qualifier Q>\n\tstruct com"
  },
  {
    "path": "android/src/glm/detail/type_vec1.hpp",
    "chars": 11253,
    "preview": "/// @ref core\n/// @file glm/detail/type_vec1.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_S"
  },
  {
    "path": "android/src/glm/detail/type_vec1.inl",
    "chars": 14004,
    "preview": "/// @ref core\n\n#include \"./compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif G"
  },
  {
    "path": "android/src/glm/detail/type_vec2.hpp",
    "chars": 15598,
    "preview": "/// @ref core\n/// @file glm/detail/type_vec2.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_S"
  },
  {
    "path": "android/src/glm/detail/type_vec2.inl",
    "chars": 23226,
    "preview": "/// @ref core\n\n#include \"./compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif G"
  },
  {
    "path": "android/src/glm/detail/type_vec3.hpp",
    "chars": 17551,
    "preview": "/// @ref core\n/// @file glm/detail/type_vec3.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_S"
  },
  {
    "path": "android/src/glm/detail/type_vec3.inl",
    "chars": 27209,
    "preview": "/// @ref core\n\n#include \"compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif GLM"
  },
  {
    "path": "android/src/glm/detail/type_vec4.hpp",
    "chars": 22819,
    "preview": "/// @ref core\n/// @file glm/detail/type_vec4.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_S"
  },
  {
    "path": "android/src/glm/detail/type_vec4.inl",
    "chars": 37181,
    "preview": "/// @ref core\n\n#include \"compute_vector_relational.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T, qualifi"
  },
  {
    "path": "android/src/glm/detail/type_vec4_simd.inl",
    "chars": 19614,
    "preview": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\ttem"
  },
  {
    "path": "android/src/glm/exponential.hpp",
    "chars": 5615,
    "preview": "/// @ref core\n/// @file glm/exponential.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8."
  },
  {
    "path": "android/src/glm/ext/matrix_clip_space.hpp",
    "chars": 29725,
    "preview": "/// @ref ext_matrix_clip_space\n/// @file glm/ext/matrix_clip_space.hpp\n///\n/// @defgroup ext_matrix_clip_space GLM_EXT_m"
  },
  {
    "path": "android/src/glm/ext/matrix_clip_space.inl",
    "chars": 20007,
    "preview": "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)"
  },
  {
    "path": "android/src/glm/ext/matrix_common.hpp",
    "chars": 995,
    "preview": "/// @ref ext_matrix_common\n/// @file glm/ext/matrix_common.hpp\n///\n/// @defgroup ext_matrix_common GLM_EXT_matrix_common"
  },
  {
    "path": "android/src/glm/ext/matrix_common.inl",
    "chars": 617,
    "preview": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FU"
  },
  {
    "path": "android/src/glm/ext/matrix_double2x2.hpp",
    "chars": 716,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double2x2.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double2x2_precision.hpp",
    "chars": 2970,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_double2x3.hpp",
    "chars": 451,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double2x3.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double2x3_precision.hpp",
    "chars": 1590,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double2x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_double2x4.hpp",
    "chars": 451,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double2x4.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double2x4_precision.hpp",
    "chars": 1590,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double2x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_double3x2.hpp",
    "chars": 451,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double3x2.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double3x2_precision.hpp",
    "chars": 1590,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double3x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_double3x3.hpp",
    "chars": 716,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double3x3.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double3x3_precision.hpp",
    "chars": 2970,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double3x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_double3x4.hpp",
    "chars": 451,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double3x4.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double3x4_precision.hpp",
    "chars": 1590,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double3x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_double4x2.hpp",
    "chars": 451,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double4x2.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double4x2_precision.hpp",
    "chars": 1590,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double4x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_double4x3.hpp",
    "chars": 451,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double4x3.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double4x3_precision.hpp",
    "chars": 1590,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double4x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_double4x4.hpp",
    "chars": 716,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double4x4.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{"
  },
  {
    "path": "android/src/glm/ext/matrix_double4x4_precision.hpp",
    "chars": 2970,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_double4x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnames"
  },
  {
    "path": "android/src/glm/ext/matrix_float2x2.hpp",
    "chars": 711,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float2x2.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float2x2_precision.hpp",
    "chars": 2955,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_float2x3.hpp",
    "chars": 448,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float2x3.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float2x3_precision.hpp",
    "chars": 1582,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float2x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_float2x4.hpp",
    "chars": 448,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float2x4.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float2x4_precision.hpp",
    "chars": 1582,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float2x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_float3x2.hpp",
    "chars": 442,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float3x2.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float3x2_precision.hpp",
    "chars": 1582,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float3x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_float3x3.hpp",
    "chars": 713,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float3x3.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float3x3_precision.hpp",
    "chars": 2955,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float3x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_float3x4.hpp",
    "chars": 449,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float3x4.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float3x4_precision.hpp",
    "chars": 1582,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float3x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_float4x2.hpp",
    "chars": 449,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float4x2.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float4x2_precision.hpp",
    "chars": 1582,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_float4x3.hpp",
    "chars": 449,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float4x3.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float4x3_precision.hpp",
    "chars": 1582,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float4x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_float4x4.hpp",
    "chars": 710,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float4x4.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n"
  },
  {
    "path": "android/src/glm/ext/matrix_float4x4_precision.hpp",
    "chars": 2955,
    "preview": "/// @ref core\n/// @file glm/ext/matrix_float4x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamesp"
  },
  {
    "path": "android/src/glm/ext/matrix_int2x2.hpp",
    "chars": 801,
    "preview": "/// @ref ext_matrix_int2x2\n/// @file glm/ext/matrix_int2x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int2x2_sized.hpp",
    "chars": 1685,
    "preview": "/// @ref ext_matrix_int2x2_sized\n/// @file glm/ext/matrix_int2x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_int2x3.hpp",
    "chars": 694,
    "preview": "/// @ref ext_matrix_int2x3\n/// @file glm/ext/matrix_int2x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int2x3_sized.hpp",
    "chars": 1179,
    "preview": "/// @ref ext_matrix_int2x3_sized\n/// @file glm/ext/matrix_int2x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_int2x4.hpp",
    "chars": 694,
    "preview": "/// @ref ext_matrix_int2x4\n/// @file glm/ext/matrix_int2x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int2x4_sized.hpp",
    "chars": 1179,
    "preview": "/// @ref ext_matrix_int2x4_sized\n/// @file glm/ext/matrix_int2x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_int3x2.hpp",
    "chars": 694,
    "preview": "/// @ref ext_matrix_int3x2\n/// @file glm/ext/matrix_int3x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int3x2_sized.hpp",
    "chars": 1179,
    "preview": "/// @ref ext_matrix_int3x2_sized\n/// @file glm/ext/matrix_int3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_int3x3.hpp",
    "chars": 801,
    "preview": "/// @ref ext_matrix_int3x3\n/// @file glm/ext/matrix_int3x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int3x3_sized.hpp",
    "chars": 1685,
    "preview": "/// @ref ext_matrix_int3x3_sized\n/// @file glm/ext/matrix_int3x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_int3x4.hpp",
    "chars": 694,
    "preview": "/// @ref ext_matrix_int3x4\n/// @file glm/ext/matrix_int3x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int3x4_sized.hpp",
    "chars": 1179,
    "preview": "/// @ref ext_matrix_int3x4_sized\n/// @file glm/ext/matrix_int3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_int4x2.hpp",
    "chars": 694,
    "preview": "/// @ref ext_matrix_int4x2\n/// @file glm/ext/matrix_int4x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int4x2_sized.hpp",
    "chars": 1179,
    "preview": "/// @ref ext_matrix_int4x2_sized\n/// @file glm/ext/matrix_int4x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_int4x3.hpp",
    "chars": 694,
    "preview": "/// @ref ext_matrix_int4x3\n/// @file glm/ext/matrix_int4x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int4x3_sized.hpp",
    "chars": 1179,
    "preview": "/// @ref ext_matrix_int4x3_sized\n/// @file glm/ext/matrix_int4x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_int4x4.hpp",
    "chars": 801,
    "preview": "/// @ref ext_matrix_int4x4\n/// @file glm/ext/matrix_int4x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_int4x4_sized.hpp",
    "chars": 1685,
    "preview": "/// @ref ext_matrix_int4x4_sized\n/// @file glm/ext/matrix_int4x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgr"
  },
  {
    "path": "android/src/glm/ext/matrix_projection.hpp",
    "chars": 8056,
    "preview": "/// @ref ext_matrix_projection\n/// @file glm/ext/matrix_projection.hpp\n///\n/// @defgroup ext_matrix_projection GLM_EXT_m"
  },
  {
    "path": "android/src/glm/ext/matrix_projection.inl",
    "chars": 3961,
    "preview": "namespace glm\n{\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> c"
  },
  {
    "path": "android/src/glm/ext/matrix_relational.hpp",
    "chars": 6710,
    "preview": "/// @ref ext_matrix_relational\n/// @file glm/ext/matrix_relational.hpp\n///\n/// @defgroup ext_matrix_relational GLM_EXT_m"
  },
  {
    "path": "android/src/glm/ext/matrix_relational.inl",
    "chars": 2926,
    "preview": "/// @ref ext_vector_relational\n/// @file glm/ext/vector_relational.inl\n\n// Dependency:\n#include \"../ext/vector_relationa"
  },
  {
    "path": "android/src/glm/ext/matrix_transform.hpp",
    "chars": 6035,
    "preview": "/// @ref ext_matrix_transform\n/// @file glm/ext/matrix_transform.hpp\n///\n/// @defgroup ext_matrix_transform GLM_EXT_matr"
  },
  {
    "path": "android/src/glm/ext/matrix_transform.inl",
    "chars": 4697,
    "preview": "namespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity()\n\t{\n\t\treturn detail::ini"
  },
  {
    "path": "android/src/glm/ext/matrix_uint2x2.hpp",
    "chars": 816,
    "preview": "/// @ref ext_matrix_uint2x2\n/// @file glm/ext/matrix_uint2x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint2x2_sized.hpp",
    "chars": 1725,
    "preview": "/// @ref ext_matrix_uint2x2_sized\n/// @file glm/ext/matrix_uint2x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @def"
  },
  {
    "path": "android/src/glm/ext/matrix_uint2x3.hpp",
    "chars": 704,
    "preview": "/// @ref ext_matrix_uint2x3\n/// @file glm/ext/matrix_uint2x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint2x3_sized.hpp",
    "chars": 1203,
    "preview": "/// @ref ext_matrix_uint2x3_sized\n/// @file glm/ext/matrix_uint2x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @def"
  },
  {
    "path": "android/src/glm/ext/matrix_uint2x4.hpp",
    "chars": 704,
    "preview": "/// @ref ext_matrix_uint2x4\n/// @file glm/ext/matrix_uint2x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint2x4_sized.hpp",
    "chars": 1204,
    "preview": "/// @ref ext_matrix_uint2x4_sized\n/// @file glm/ext/matrixu_uint2x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @de"
  },
  {
    "path": "android/src/glm/ext/matrix_uint3x2.hpp",
    "chars": 704,
    "preview": "/// @ref ext_matrix_uint3x2\n/// @file glm/ext/matrix_uint3x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint3x2_sized.hpp",
    "chars": 1195,
    "preview": "/// @ref ext_matrix_uint3x2_sized\n/// @file glm/ext/matrix_uint3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @def"
  },
  {
    "path": "android/src/glm/ext/matrix_uint3x3.hpp",
    "chars": 816,
    "preview": "/// @ref ext_matrix_uint3x3\n/// @file glm/ext/matrix_uint3x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint3x3_sized.hpp",
    "chars": 1725,
    "preview": "/// @ref ext_matrix_uint3x3_sized\n/// @file glm/ext/matrix_uint3x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @def"
  },
  {
    "path": "android/src/glm/ext/matrix_uint3x4.hpp",
    "chars": 703,
    "preview": "/// @ref ext_matrix_uint3x4\n/// @file glm/ext/matrix_uint3x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint3x4_sized.hpp",
    "chars": 1203,
    "preview": "/// @ref ext_matrix_uint3x4_sized\n/// @file glm/ext/matrix_uint3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @def"
  },
  {
    "path": "android/src/glm/ext/matrix_uint4x2.hpp",
    "chars": 705,
    "preview": "/// @ref ext_matrix_uint4x2\n/// @file glm/ext/matrix_uint4x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint4x2_sized.hpp",
    "chars": 1203,
    "preview": "/// @ref ext_matrix_uint4x2_sized\n/// @file glm/ext/matrix_uint4x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @def"
  },
  {
    "path": "android/src/glm/ext/matrix_uint4x3.hpp",
    "chars": 705,
    "preview": "/// @ref ext_matrix_uint4x3\n/// @file glm/ext/matrix_uint4x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint4x3_sized.hpp",
    "chars": 1203,
    "preview": "/// @ref ext_matrix_uint4x3_sized\n/// @file glm/ext/matrix_uint4x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @def"
  },
  {
    "path": "android/src/glm/ext/matrix_uint4x4.hpp",
    "chars": 816,
    "preview": "/// @ref ext_matrix_uint4x4\n/// @file glm/ext/matrix_uint4x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_ma"
  },
  {
    "path": "android/src/glm/ext/matrix_uint4x4_sized.hpp",
    "chars": 1725,
    "preview": "/// @ref ext_matrix_uint4x4_sized\n/// @file glm/ext/matrix_uint4x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @def"
  },
  {
    "path": "android/src/glm/ext/quaternion_common.hpp",
    "chars": 4840,
    "preview": "/// @ref ext_quaternion_common\n/// @file glm/ext/quaternion_common.hpp\n///\n/// @defgroup ext_quaternion_common GLM_EXT_q"
  },
  {
    "path": "android/src/glm/ext/quaternion_common.inl",
    "chars": 4379,
    "preview": "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"
  },
  {
    "path": "android/src/glm/ext/quaternion_common_simd.inl",
    "chars": 372,
    "preview": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_dot<qua<float"
  },
  {
    "path": "android/src/glm/ext/quaternion_double.hpp",
    "chars": 985,
    "preview": "/// @ref ext_quaternion_double\n/// @file glm/ext/quaternion_double.hpp\n///\n/// @defgroup ext_quaternion_double GLM_EXT_q"
  },
  {
    "path": "android/src/glm/ext/quaternion_double_precision.hpp",
    "chars": 1318,
    "preview": "/// @ref ext_quaternion_double_precision\n/// @file glm/ext/quaternion_double_precision.hpp\n///\n/// @defgroup ext_quatern"
  },
  {
    "path": "android/src/glm/ext/quaternion_exponential.hpp",
    "chars": 1741,
    "preview": "/// @ref ext_quaternion_exponential\n/// @file glm/ext/quaternion_exponential.hpp\n///\n/// @defgroup ext_quaternion_expone"
  },
  {
    "path": "android/src/glm/ext/quaternion_exponential.inl",
    "chars": 2574,
    "preview": "#include \"scalar_constants.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> exp(qu"
  },
  {
    "path": "android/src/glm/ext/quaternion_float.hpp",
    "chars": 976,
    "preview": "/// @ref ext_quaternion_float\n/// @file glm/ext/quaternion_float.hpp\n///\n/// @defgroup ext_quaternion_float GLM_EXT_quat"
  },
  {
    "path": "android/src/glm/ext/quaternion_float_precision.hpp",
    "chars": 1153,
    "preview": "/// @ref ext_quaternion_float_precision\n/// @file glm/ext/quaternion_float_precision.hpp\n///\n/// @defgroup ext_quaternio"
  },
  {
    "path": "android/src/glm/ext/quaternion_geometric.hpp",
    "chars": 1897,
    "preview": "/// @ref ext_quaternion_geometric\n/// @file glm/ext/quaternion_geometric.hpp\n///\n/// @defgroup ext_quaternion_geometric "
  },
  {
    "path": "android/src/glm/ext/quaternion_geometric.inl",
    "chars": 1218,
    "preview": "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"
  },
  {
    "path": "android/src/glm/ext/quaternion_relational.hpp",
    "chars": 1954,
    "preview": "/// @ref ext_quaternion_relational\n/// @file glm/ext/quaternion_relational.hpp\n///\n/// @defgroup ext_quaternion_relation"
  },
  {
    "path": "android/src/glm/ext/quaternion_relational.inl",
    "chars": 1019,
    "preview": "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, "
  },
  {
    "path": "android/src/glm/ext/quaternion_transform.hpp",
    "chars": 1331,
    "preview": "/// @ref ext_quaternion_transform\n/// @file glm/ext/quaternion_transform.hpp\n///\n/// @defgroup ext_quaternion_transform "
  },
  {
    "path": "android/src/glm/ext/quaternion_transform.inl",
    "chars": 629,
    "preview": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> rotate(qua<T, Q> const& q, T const& ang"
  },
  {
    "path": "android/src/glm/ext/quaternion_trigonometric.hpp",
    "chars": 1813,
    "preview": "/// @ref ext_quaternion_trigonometric\n/// @file glm/ext/quaternion_trigonometric.hpp\n///\n/// @defgroup ext_quaternion_tr"
  },
  {
    "path": "android/src/glm/ext/quaternion_trigonometric.inl",
    "chars": 895,
    "preview": "#include \"scalar_constants.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T angle(qua<T, Q"
  },
  {
    "path": "android/src/glm/ext/scalar_common.hpp",
    "chars": 5037,
    "preview": "/// @ref ext_scalar_common\n/// @file glm/ext/scalar_common.hpp\n///\n/// @defgroup ext_scalar_common GLM_EXT_scalar_common"
  },
  {
    "path": "android/src/glm/ext/scalar_common.inl",
    "chars": 3572,
    "preview": "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"
  },
  {
    "path": "android/src/glm/ext/scalar_constants.hpp",
    "chars": 1037,
    "preview": "/// @ref ext_scalar_constants\n/// @file glm/ext/scalar_constants.hpp\n///\n/// @defgroup ext_scalar_constants GLM_EXT_scal"
  },
  {
    "path": "android/src/glm/ext/scalar_constants.inl",
    "chars": 710,
    "preview": "#include <limits>\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon()\n\t{\n\t\t"
  },
  {
    "path": "android/src/glm/ext/scalar_int_sized.hpp",
    "chars": 1329,
    "preview": "/// @ref ext_scalar_int_sized\n/// @file glm/ext/scalar_int_sized.hpp\n///\n/// @defgroup ext_scalar_int_sized GLM_EXT_scal"
  },
  {
    "path": "android/src/glm/ext/scalar_integer.hpp",
    "chars": 2683,
    "preview": "/// @ref ext_scalar_integer\n/// @file glm/ext/scalar_integer.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_sc"
  },
  {
    "path": "android/src/glm/ext/scalar_integer.inl",
    "chars": 6944,
    "preview": "#include \"../integer.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool compute"
  },
  {
    "path": "android/src/glm/ext/scalar_packing.hpp",
    "chars": 676,
    "preview": "/// @ref ext_scalar_packing\n/// @file glm/ext/scalar_packing.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_sc"
  },
  {
    "path": "android/src/glm/ext/scalar_packing.inl",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "android/src/glm/ext/scalar_relational.hpp",
    "chars": 2264,
    "preview": "/// @ref ext_scalar_relational\n/// @file glm/ext/scalar_relational.hpp\n///\n/// @defgroup ext_scalar_relational GLM_EXT_s"
  },
  {
    "path": "android/src/glm/ext/scalar_relational.inl",
    "chars": 1127,
    "preview": "#include \"../common.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../det"
  },
  {
    "path": "android/src/glm/ext/scalar_uint_sized.hpp",
    "chars": 1366,
    "preview": "/// @ref ext_scalar_uint_sized\n/// @file glm/ext/scalar_uint_sized.hpp\n///\n/// @defgroup ext_scalar_uint_sized GLM_EXT_s"
  },
  {
    "path": "android/src/glm/ext/scalar_ulp.hpp",
    "chars": 2050,
    "preview": "/// @ref ext_scalar_ulp\n/// @file glm/ext/scalar_ulp.hpp\n///\n/// @defgroup ext_scalar_ulp GLM_EXT_scalar_ulp\n/// @ingrou"
  },
  {
    "path": "android/src/glm/ext/scalar_ulp.inl",
    "chars": 7038,
    "preview": "/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.\n///\n/// Developed at SunPro, a Sun Microsystems, I"
  },
  {
    "path": "android/src/glm/ext/vector_bool1.hpp",
    "chars": 649,
    "preview": "/// @ref ext_vector_bool1\n/// @file glm/ext/vector_bool1.hpp\n///\n/// @defgroup ext_vector_bool1 GLM_EXT_vector_bool1\n///"
  },
  {
    "path": "android/src/glm/ext/vector_bool1_precision.hpp",
    "chars": 876,
    "preview": "/// @ref ext_vector_bool1_precision\n/// @file glm/ext/vector_bool1_precision.hpp\n///\n/// @defgroup ext_vector_bool1_prec"
  },
  {
    "path": "android/src/glm/ext/vector_bool2.hpp",
    "chars": 392,
    "preview": "/// @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/// "
  }
]

// ... and 380 more files (download for full content)

About this extraction

This page contains the full source code of the alnitak/flutter_opengl GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 580 files (2.5 MB), approximately 674.4k tokens, and a symbol index with 1496 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!