Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
# Conflicts:
#	.github/workflows/ci.yml
#	CMakeLists.txt
#	doc/api/a00002_source.html
#	doc/api/a00005_source.html
#	doc/api/a00008_source.html
#	doc/api/a00011_source.html
#	doc/api/a00014_source.html
#	doc/api/a00017_source.html
#	doc/api/a00020_source.html
#	doc/api/a00023_source.html
#	doc/api/a00026_source.html
#	doc/api/a00029_source.html
#	doc/api/a00032_source.html
#	doc/api/a00035_source.html
#	doc/api/a00038_source.html
#	doc/api/a00041.html
#	doc/api/a00041_source.html
#	doc/api/a00044.html
#	doc/api/a00044_source.html
#	doc/api/a00047_source.html
#	doc/api/a00050.html
#	doc/api/a00050_source.html
#	doc/api/a00053.html
#	doc/api/a00053_source.html
#	doc/api/a00056.html
#	doc/api/a00056_source.html
#	doc/api/a00059.html
#	doc/api/a00059_source.html
#	doc/api/a00062.html
#	doc/api/a00062_source.html
#	doc/api/a00065.html
#	doc/api/a00065_source.html
#	doc/api/a00068.html
#	doc/api/a00068_source.html
#	doc/api/a00071.html
#	doc/api/a00071_source.html
#	doc/api/a00074.html
#	doc/api/a00074_source.html
#	doc/api/a00077.html
#	doc/api/a00077_source.html
#	doc/api/a00080.html
#	doc/api/a00080_source.html
#	doc/api/a00083.html
#	doc/api/a00083_source.html
#	doc/api/a00086_source.html
#	doc/api/a00089.html
#	doc/api/a00089_source.html
#	doc/api/a00092.html
#	doc/api/a00092_source.html
#	doc/api/a00095_source.html
#	doc/api/a00098.html
#	doc/api/a00098_source.html
#	doc/api/a00101.html
#	doc/api/a00101_source.html
#	doc/api/a00104.html
#	doc/api/a00104_source.html
#	doc/api/a00107.html
#	doc/api/a00107_source.html
#	doc/api/a00110.html
#	doc/api/a00110_source.html
#	doc/api/a00113.html
#	doc/api/a00113_source.html
#	doc/api/a00116.html
#	doc/api/a00116_source.html
#	doc/api/a00119.html
#	doc/api/a00119_source.html
#	doc/api/a00122.html
#	doc/api/a00122_source.html
#	doc/api/a00125.html
#	doc/api/a00125_source.html
#	doc/api/a00128.html
#	doc/api/a00128_source.html
#	doc/api/a00131.html
#	doc/api/a00131_source.html
#	doc/api/a00134.html
#	doc/api/a00134_source.html
#	doc/api/a00137.html
#	doc/api/a00137_source.html
#	doc/api/a00140.html
#	doc/api/a00140_source.html
#	doc/api/a00143.html
#	doc/api/a00143_source.html
#	doc/api/a00146.html
#	doc/api/a00146_source.html
#	doc/api/a00149.html
#	doc/api/a00149_source.html
#	doc/api/a00152.html
#	doc/api/a00152_source.html
#	doc/api/a00155.html
#	doc/api/a00155_source.html
#	doc/api/a00158.html
#	doc/api/a00158_source.html
#	doc/api/a00161.html
#	doc/api/a00161_source.html
#	doc/api/a00164_source.html
#	doc/api/a00167.html
#	doc/api/a00167_source.html
#	doc/api/a00170.html
#	doc/api/a00170_source.html
#	doc/api/a00173.html
#	doc/api/a00173_source.html
#	doc/api/a00176.html
#	doc/api/a00176_source.html
#	doc/api/a00179.html
#	doc/api/a00179_source.html
#	doc/api/a00182.html
#	doc/api/a00182_source.html
#	doc/api/a00185.html
#	doc/api/a00185_source.html
#	doc/api/a00188_source.html
#	doc/api/a00191.html
#	doc/api/a00191_source.html
#	doc/api/a00194.html
#	doc/api/a00194_source.html
#	doc/api/a00197.html
#	doc/api/a00197_source.html
#	doc/api/a00200.html
#	doc/api/a00200_source.html
#	doc/api/a00203.html
#	doc/api/a00203_source.html
#	doc/api/a00206.html
#	doc/api/a00206_source.html
#	doc/api/a00209.html
#	doc/api/a00209_source.html
#	doc/api/a00212.html
#	doc/api/a00212_source.html
#	doc/api/a00215.html
#	doc/api/a00215_source.html
#	doc/api/a00218.html
#	doc/api/a00218_source.html
#	doc/api/a00221.html
#	doc/api/a00221_source.html
#	doc/api/a00224.html
#	doc/api/a00224_source.html
#	doc/api/a00227.html
#	doc/api/a00227_source.html
#	doc/api/a00230.html
#	doc/api/a00230_source.html
#	doc/api/a00233.html
#	doc/api/a00233_source.html
#	doc/api/a00242.html
#	doc/api/a00245.html
#	doc/api/a00248.html
#	doc/api/a00251.html
#	doc/api/a00254.html
#	doc/api/a00260.html
#	doc/api/a00263.html
#	doc/api/a00269.html
#	doc/api/a00272.html
#	doc/api/a00275.html
#	doc/api/a00278.html
#	doc/api/a00281.html
#	doc/api/a00284.html
#	doc/api/a00287.html
#	doc/api/a00290.html
#	doc/api/a00293.html
#	doc/api/a00296.html
#	doc/api/a00299.html
#	doc/api/a00305.html
#	doc/api/a00308.html
#	doc/api/a00311.html
#	doc/api/a00314.html
#	doc/api/a00317.html
#	doc/api/a00320.html
#	doc/api/a00323.html
#	doc/api/a00326.html
#	doc/api/a00329.html
#	doc/api/a00332.html
#	doc/api/a00335.html
#	doc/api/a00338.html
#	doc/api/a00341.html
#	doc/api/a00344.html
#	doc/api/a00347.html
#	doc/api/a00350.html
#	doc/api/a00353.html
#	doc/api/a00356.html
#	doc/api/a00359.html
#	doc/api/a00362.html
#	doc/api/a00365.html
#	doc/api/a00368.html
#	doc/api/a00374.html
#	doc/api/bc_s.png
#	doc/api/bdwn.png
#	doc/api/closed.png
#	doc/api/doc.png
#	doc/api/doxygen.css
#	doc/api/doxygen.png
#	doc/api/dynsections.js
#	doc/api/files.html
#	doc/api/folderclosed.png
#	doc/api/folderopen.png
#	doc/api/index.html
#	doc/api/jquery.js
#	doc/api/modules.html
#	doc/api/nav_f.png
#	doc/api/nav_h.png
#	doc/api/open.png
#	doc/api/search/all_0.html
#	doc/api/search/all_0.js
#	doc/api/search/all_1.html
#	doc/api/search/all_1.js
#	doc/api/search/all_10.html
#	doc/api/search/all_10.js
#	doc/api/search/all_11.html
#	doc/api/search/all_11.js
#	doc/api/search/all_12.html
#	doc/api/search/all_12.js
#	doc/api/search/all_13.html
#	doc/api/search/all_13.js
#	doc/api/search/all_14.html
#	doc/api/search/all_14.js
#	doc/api/search/all_15.html
#	doc/api/search/all_15.js
#	doc/api/search/all_16.html
#	doc/api/search/all_16.js
#	doc/api/search/all_2.html
#	doc/api/search/all_2.js
#	doc/api/search/all_3.html
#	doc/api/search/all_3.js
#	doc/api/search/all_4.html
#	doc/api/search/all_4.js
#	doc/api/search/all_5.html
#	doc/api/search/all_5.js
#	doc/api/search/all_6.html
#	doc/api/search/all_6.js
#	doc/api/search/all_7.html
#	doc/api/search/all_7.js
#	doc/api/search/all_8.html
#	doc/api/search/all_8.js
#	doc/api/search/all_9.html
#	doc/api/search/all_9.js
#	doc/api/search/all_a.html
#	doc/api/search/all_a.js
#	doc/api/search/all_b.html
#	doc/api/search/all_b.js
#	doc/api/search/all_c.html
#	doc/api/search/all_c.js
#	doc/api/search/all_d.html
#	doc/api/search/all_d.js
#	doc/api/search/all_e.html
#	doc/api/search/all_e.js
#	doc/api/search/all_f.html
#	doc/api/search/all_f.js
#	doc/api/search/files_0.html
#	doc/api/search/files_0.js
#	doc/api/search/files_1.html
#	doc/api/search/files_1.js
#	doc/api/search/files_10.html
#	doc/api/search/files_10.js
#	doc/api/search/files_11.html
#	doc/api/search/files_11.js
#	doc/api/search/files_12.html
#	doc/api/search/files_12.js
#	doc/api/search/files_13.html
#	doc/api/search/files_13.js
#	doc/api/search/files_14.html
#	doc/api/search/files_14.js
#	doc/api/search/files_2.html
#	doc/api/search/files_2.js
#	doc/api/search/files_3.html
#	doc/api/search/files_3.js
#	doc/api/search/files_4.html
#	doc/api/search/files_4.js
#	doc/api/search/files_5.html
#	doc/api/search/files_5.js
#	doc/api/search/files_6.html
#	doc/api/search/files_6.js
#	doc/api/search/files_7.html
#	doc/api/search/files_7.js
#	doc/api/search/files_8.html
#	doc/api/search/files_8.js
#	doc/api/search/files_9.html
#	doc/api/search/files_9.js
#	doc/api/search/files_a.html
#	doc/api/search/files_a.js
#	doc/api/search/files_b.html
#	doc/api/search/files_b.js
#	doc/api/search/files_c.html
#	doc/api/search/files_c.js
#	doc/api/search/files_d.html
#	doc/api/search/files_d.js
#	doc/api/search/files_e.html
#	doc/api/search/files_e.js
#	doc/api/search/files_f.html
#	doc/api/search/files_f.js
#	doc/api/search/functions_0.html
#	doc/api/search/functions_0.js
#	doc/api/search/functions_1.html
#	doc/api/search/functions_1.js
#	doc/api/search/functions_10.html
#	doc/api/search/functions_10.js
#	doc/api/search/functions_11.html
#	doc/api/search/functions_11.js
#	doc/api/search/functions_12.html
#	doc/api/search/functions_12.js
#	doc/api/search/functions_13.html
#	doc/api/search/functions_13.js
#	doc/api/search/functions_14.html
#	doc/api/search/functions_14.js
#	doc/api/search/functions_15.html
#	doc/api/search/functions_15.js
#	doc/api/search/functions_16.html
#	doc/api/search/functions_16.js
#	doc/api/search/functions_2.html
#	doc/api/search/functions_2.js
#	doc/api/search/functions_3.html
#	doc/api/search/functions_3.js
#	doc/api/search/functions_4.html
#	doc/api/search/functions_4.js
#	doc/api/search/functions_5.html
#	doc/api/search/functions_5.js
#	doc/api/search/functions_6.html
#	doc/api/search/functions_6.js
#	doc/api/search/functions_7.html
#	doc/api/search/functions_7.js
#	doc/api/search/functions_8.html
#	doc/api/search/functions_8.js
#	doc/api/search/functions_9.html
#	doc/api/search/functions_9.js
#	doc/api/search/functions_a.html
#	doc/api/search/functions_a.js
#	doc/api/search/functions_b.html
#	doc/api/search/functions_b.js
#	doc/api/search/functions_c.html
#	doc/api/search/functions_c.js
#	doc/api/search/functions_d.html
#	doc/api/search/functions_d.js
#	doc/api/search/functions_e.html
#	doc/api/search/functions_e.js
#	doc/api/search/functions_f.html
#	doc/api/search/functions_f.js
#	doc/api/search/groups_0.html
#	doc/api/search/groups_0.js
#	doc/api/search/groups_1.html
#	doc/api/search/groups_1.js
#	doc/api/search/groups_2.html
#	doc/api/search/groups_2.js
#	doc/api/search/groups_3.html
#	doc/api/search/groups_3.js
#	doc/api/search/groups_4.html
#	doc/api/search/groups_4.js
#	doc/api/search/groups_5.html
#	doc/api/search/groups_5.js
#	doc/api/search/groups_6.html
#	doc/api/search/groups_6.js
#	doc/api/search/groups_7.html
#	doc/api/search/groups_7.js
#	doc/api/search/groups_8.html
#	doc/api/search/groups_8.js
#	doc/api/search/groups_9.html
#	doc/api/search/groups_9.js
#	doc/api/search/mag_sel.png
#	doc/api/search/nomatches.html
#	doc/api/search/pages_0.html
#	doc/api/search/pages_0.js
#	doc/api/search/search.css
#	doc/api/search/search.js
#	doc/api/search/search_l.png
#	doc/api/search/search_r.png
#	doc/api/search/typedefs_0.html
#	doc/api/search/typedefs_0.js
#	doc/api/search/typedefs_1.html
#	doc/api/search/typedefs_1.js
#	doc/api/search/typedefs_2.html
#	doc/api/search/typedefs_2.js
#	doc/api/search/typedefs_3.html
#	doc/api/search/typedefs_3.js
#	doc/api/search/typedefs_4.html
#	doc/api/search/typedefs_4.js
#	doc/api/search/typedefs_5.html
#	doc/api/search/typedefs_5.js
#	doc/api/search/typedefs_6.html
#	doc/api/search/typedefs_6.js
#	doc/api/search/typedefs_7.html
#	doc/api/search/typedefs_7.js
#	doc/api/search/typedefs_8.html
#	doc/api/search/typedefs_8.js
#	doc/api/search/typedefs_9.html
#	doc/api/search/typedefs_9.js
#	doc/api/search/typedefs_a.html
#	doc/api/search/typedefs_a.js
#	doc/api/search/typedefs_b.html
#	doc/api/search/typedefs_b.js
#	doc/api/search/typedefs_c.html
#	doc/api/search/typedefs_c.js
#	doc/api/search/typedefs_d.html
#	doc/api/search/typedefs_d.js
#	doc/api/splitbar.png
#	doc/api/sync_off.png
#	doc/api/sync_on.png
#	doc/api/tab_a.png
#	doc/api/tab_b.png
#	doc/api/tab_h.png
#	doc/api/tab_s.png
#	doc/api/tabs.css
#	doc/man.doxy
#	doc/manual/logo-mini.png
#	glm/CMakeLists.txt
#	glm/common.hpp
#	glm/detail/_swizzle.hpp
#	glm/detail/_swizzle_func.hpp
#	glm/detail/_vectorize.hpp
#	glm/detail/compute_common.hpp
#	glm/detail/func_common.inl
#	glm/detail/func_common_simd.inl
#	glm/detail/func_exponential.inl
#	glm/detail/func_geometric.inl
#	glm/detail/func_geometric_simd.inl
#	glm/detail/func_integer.inl
#	glm/detail/func_integer_simd.inl
#	glm/detail/func_matrix.inl
#	glm/detail/func_matrix_simd.inl
#	glm/detail/func_trigonometric.inl
#	glm/detail/qualifier.hpp
#	glm/detail/setup.hpp
#	glm/detail/type_mat2x2.hpp
#	glm/detail/type_mat2x2.inl
#	glm/detail/type_mat2x3.hpp
#	glm/detail/type_mat2x3.inl
#	glm/detail/type_mat2x4.hpp
#	glm/detail/type_mat2x4.inl
#	glm/detail/type_mat3x2.hpp
#	glm/detail/type_mat3x2.inl
#	glm/detail/type_mat3x3.hpp
#	glm/detail/type_mat3x3.inl
#	glm/detail/type_mat3x4.hpp
#	glm/detail/type_mat3x4.inl
#	glm/detail/type_mat4x2.hpp
#	glm/detail/type_mat4x2.inl
#	glm/detail/type_mat4x3.hpp
#	glm/detail/type_mat4x3.inl
#	glm/detail/type_mat4x4.hpp
#	glm/detail/type_mat4x4.inl
#	glm/detail/type_quat.hpp
#	glm/detail/type_quat.inl
#	glm/detail/type_quat_simd.inl
#	glm/detail/type_vec2.hpp
#	glm/detail/type_vec2.inl
#	glm/detail/type_vec3.hpp
#	glm/detail/type_vec3.inl
#	glm/detail/type_vec4.hpp
#	glm/detail/type_vec4.inl
#	glm/ext.hpp
#	glm/ext/matrix_clip_space.inl
#	glm/ext/matrix_transform.hpp
#	glm/ext/matrix_transform.inl
#	glm/ext/quaternion_common.hpp
#	glm/ext/quaternion_common.inl
#	glm/ext/quaternion_geometric.hpp
#	glm/ext/quaternion_geometric.inl
#	glm/ext/quaternion_trigonometric.hpp
#	glm/ext/scalar_common.inl
#	glm/ext/scalar_constants.inl
#	glm/ext/scalar_integer.inl
#	glm/ext/scalar_reciprocal.inl
#	glm/ext/scalar_ulp.inl
#	glm/ext/vector_reciprocal.inl
#	glm/ext/vector_relational.inl
#	glm/ext/vector_ulp.inl
#	glm/gtc/bitfield.inl
#	glm/gtc/constants.hpp
#	glm/gtc/constants.inl
#	glm/gtc/noise.inl
#	glm/gtc/packing.inl
#	glm/gtc/quaternion.hpp
#	glm/gtc/quaternion.inl
#	glm/gtc/random.inl
#	glm/gtc/ulp.inl
#	glm/gtx/associated_min_max.hpp
#	glm/gtx/bit.hpp
#	glm/gtx/closest_point.hpp
#	glm/gtx/color_encoding.hpp
#	glm/gtx/color_space.hpp
#	glm/gtx/color_space.inl
#	glm/gtx/color_space_YCoCg.hpp
#	glm/gtx/common.hpp
#	glm/gtx/common.inl
#	glm/gtx/compatibility.hpp
#	glm/gtx/component_wise.hpp
#	glm/gtx/component_wise.inl
#	glm/gtx/dual_quaternion.hpp
#	glm/gtx/easing.hpp
#	glm/gtx/euler_angles.hpp
#	glm/gtx/extend.hpp
#	glm/gtx/extended_min_max.hpp
#	glm/gtx/exterior_product.hpp
#	glm/gtx/exterior_product.inl
#	glm/gtx/fast_exponential.hpp
#	glm/gtx/fast_square_root.hpp
#	glm/gtx/fast_square_root.inl
#	glm/gtx/fast_trigonometry.hpp
#	glm/gtx/functions.hpp
#	glm/gtx/gradient_paint.hpp
#	glm/gtx/handed_coordinate_space.hpp
#	glm/gtx/hash.hpp
#	glm/gtx/hash.inl
#	glm/gtx/integer.hpp
#	glm/gtx/intersect.hpp
#	glm/gtx/intersect.inl
#	glm/gtx/io.hpp
#	glm/gtx/io.inl
#	glm/gtx/log_base.hpp
#	glm/gtx/matrix_cross_product.hpp
#	glm/gtx/matrix_decompose.hpp
#	glm/gtx/matrix_decompose.inl
#	glm/gtx/matrix_factorisation.hpp
#	glm/gtx/matrix_interpolation.hpp
#	glm/gtx/matrix_major_storage.hpp
#	glm/gtx/matrix_operation.hpp
#	glm/gtx/matrix_query.hpp
#	glm/gtx/matrix_transform_2d.hpp
#	glm/gtx/mixed_product.hpp
#	glm/gtx/norm.hpp
#	glm/gtx/norm.inl
#	glm/gtx/normal.hpp
#	glm/gtx/normalize_dot.hpp
#	glm/gtx/number_precision.hpp
#	glm/gtx/number_precision.inl
#	glm/gtx/optimum_pow.hpp
#	glm/gtx/orthonormalize.hpp
#	glm/gtx/pca.hpp
#	glm/gtx/perpendicular.hpp
#	glm/gtx/polar_coordinates.hpp
#	glm/gtx/projection.hpp
#	glm/gtx/quaternion.hpp
#	glm/gtx/quaternion.inl
#	glm/gtx/range.hpp
#	glm/gtx/raw_data.hpp
#	glm/gtx/rotate_normalized_axis.hpp
#	glm/gtx/rotate_vector.hpp
#	glm/gtx/scalar_multiplication.hpp
#	glm/gtx/scalar_relational.hpp
#	glm/gtx/spline.hpp
#	glm/gtx/std_based_type.hpp
#	glm/gtx/string_cast.hpp
#	glm/gtx/string_cast.inl
#	glm/gtx/texture.hpp
#	glm/gtx/transform.hpp
#	glm/gtx/transform2.hpp
#	glm/gtx/type_aligned.hpp
#	glm/gtx/type_trait.hpp
#	glm/gtx/vec_swizzle.hpp
#	glm/gtx/vector_angle.hpp
#	glm/gtx/vector_angle.inl
#	glm/gtx/vector_query.hpp
#	glm/gtx/wrap.hpp
#	glm/simd/common.h
#	glm/simd/matrix.h
#	glm/simd/neon.h
#	glm/simd/platform.h
#	manual.md
#	readme.md
#	test/CMakeLists.txt
#	test/bug/bug_ms_vec_static.cpp
#	test/core/CMakeLists.txt
#	test/core/core_force_compiler_unknown.cpp
#	test/core/core_force_pure.cpp
#	test/core/core_force_xyzw_only.cpp
#	test/core/core_func_common.cpp
#	test/core/core_func_geometric.cpp
#	test/core/core_func_integer.cpp
#	test/core/core_func_integer_bit_count.cpp
#	test/core/core_func_integer_find_lsb.cpp
#	test/core/core_func_integer_find_msb.cpp
#	test/core/core_func_matrix.cpp
#	test/core/core_func_swizzle.cpp
#	test/core/core_setup_force_cxx98.cpp
#	test/core/core_setup_message.cpp
#	test/core/core_setup_platform_unknown.cpp
#	test/core/core_type_aligned.cpp
#	test/core/core_type_cast.cpp
#	test/core/core_type_mat2x2.cpp
#	test/core/core_type_mat2x3.cpp
#	test/core/core_type_mat2x4.cpp
#	test/core/core_type_mat3x2.cpp
#	test/core/core_type_mat3x3.cpp
#	test/core/core_type_mat3x4.cpp
#	test/core/core_type_mat4x2.cpp
#	test/core/core_type_mat4x3.cpp
#	test/core/core_type_mat4x4.cpp
#	test/core/core_type_vec1.cpp
#	test/core/core_type_vec2.cpp
#	test/core/core_type_vec3.cpp
#	test/core/core_type_vec4.cpp
#	test/ext/ext_matrix_common.cpp
#	test/ext/ext_matrix_integer.cpp
#	test/ext/ext_quaternion_exponential.cpp
#	test/ext/ext_quaternion_type.cpp
#	test/ext/ext_scalar_common.cpp
#	test/ext/ext_scalar_integer.cpp
#	test/ext/ext_vec1.cpp
#	test/ext/ext_vector_common.cpp
#	test/ext/ext_vector_integer.cpp
#	test/ext/ext_vector_integer_sized.cpp
#	test/gtc/gtc_bitfield.cpp
#	test/gtc/gtc_color_space.cpp
#	test/gtc/gtc_constants.cpp
#	test/gtc/gtc_epsilon.cpp
#	test/gtc/gtc_integer.cpp
#	test/gtc/gtc_matrix_inverse.cpp
#	test/gtc/gtc_matrix_transform.cpp
#	test/gtc/gtc_packing.cpp
#	test/gtc/gtc_quaternion.cpp
#	test/gtc/gtc_random.cpp
#	test/gtc/gtc_round.cpp
#	test/gtc/gtc_type_aligned.cpp
#	test/gtc/gtc_type_precision.cpp
#	test/gtc/gtc_type_ptr.cpp
#	test/gtc/gtc_ulp.cpp
#	test/gtx/CMakeLists.txt
#	test/gtx/gtx_color_encoding.cpp
#	test/gtx/gtx_color_space.cpp
#	test/gtx/gtx_color_space_YCoCg.cpp
#	test/gtx/gtx_common.cpp
#	test/gtx/gtx_component_wise.cpp
#	test/gtx/gtx_dual_quaternion.cpp
#	test/gtx/gtx_easing.cpp
#	test/gtx/gtx_euler_angle.cpp
#	test/gtx/gtx_extended_min_max.cpp
#	test/gtx/gtx_exterior_product.cpp
#	test/gtx/gtx_fast_square_root.cpp
#	test/gtx/gtx_fast_trigonometry.cpp
#	test/gtx/gtx_functions.cpp
#	test/gtx/gtx_hash.cpp
#	test/gtx/gtx_integer.cpp
#	test/gtx/gtx_intersect.cpp
#	test/gtx/gtx_io.cpp
#	test/gtx/gtx_load.cpp
#	test/gtx/gtx_log_base.cpp
#	test/gtx/gtx_matrix_decompose.cpp
#	test/gtx/gtx_matrix_factorisation.cpp
#	test/gtx/gtx_matrix_interpolation.cpp
#	test/gtx/gtx_matrix_operation.cpp
#	test/gtx/gtx_matrix_query.cpp
#	test/gtx/gtx_norm.cpp
#	test/gtx/gtx_pca.cpp
#	test/gtx/gtx_quaternion.cpp
#	test/gtx/gtx_range.cpp
#	test/gtx/gtx_rotate_vector.cpp
#	test/gtx/gtx_scalar_multiplication.cpp
#	test/gtx/gtx_spline.cpp
#	test/gtx/gtx_string_cast.cpp
#	test/gtx/gtx_texture.cpp
#	test/gtx/gtx_type_aligned.cpp
#	test/gtx/gtx_type_trait.cpp
#	test/gtx/gtx_wrap.cpp
#	test/perf/perf_matrix_div.cpp
#	test/perf/perf_matrix_inverse.cpp
#	test/perf/perf_matrix_mul.cpp
#	test/perf/perf_matrix_mul_vector.cpp
#	test/perf/perf_matrix_transpose.cpp
#	test/perf/perf_vector_mul_matrix.cpp
  • Loading branch information
icaven committed Feb 9, 2024
2 parents 3bb607e + b101e8f commit 894e39f
Show file tree
Hide file tree
Showing 1,218 changed files with 167,577 additions and 39,187 deletions.
299 changes: 185 additions & 114 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

287 changes: 266 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
cmake_minimum_required(VERSION 3.6 FATAL_ERROR)
cmake_policy(VERSION 3.6)


file(READ "glm/detail/setup.hpp" GLM_SETUP_FILE)
string(REGEX MATCH "#define[ ]+GLM_VERSION_MAJOR[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
set(GLM_VERSION_MAJOR "${CMAKE_MATCH_1}")
Expand All @@ -12,34 +11,280 @@ set(GLM_VERSION_PATCH "${CMAKE_MATCH_1}")
string(REGEX MATCH "#define[ ]+GLM_VERSION_REVISION[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
set(GLM_VERSION_REVISION "${CMAKE_MATCH_1}")

set(GLM_VERSION ${GLM_VERSION_MAJOR}.${GLM_VERSION_MINOR}.${GLM_VERSION_PATCH}.${GLM_VERSION_REVISION})
set(GLM_VERSION ${GLM_VERSION_MAJOR}.${GLM_VERSION_MINOR}.${GLM_VERSION_PATCH})
project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
message(STATUS "GLM: Version " ${GLM_VERSION})

add_subdirectory(glm)
add_library(glm::glm ALIAS glm)
set(GLM_IS_MASTER_PROJECT OFF)
if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
set(GLM_IS_MASTER_PROJECT ON)
endif()

if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
option(GLM_BUILD_LIBRARY "Build dynamic/static library" ON)
option(GLM_BUILD_TESTS "Build the test programs" ${GLM_IS_MASTER_PROJECT})
option(GLM_BUILD_INSTALL "Generate the install target" ${GLM_IS_MASTER_PROJECT})

include(CPack)
install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN "CMakeLists.txt" EXCLUDE)
install(EXPORT glm FILE glmConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm NAMESPACE glm::)
include(CMakePackageConfigHelpers)
write_basic_package_version_file("glmConfigVersion.cmake" COMPATIBILITY AnyNewerVersion)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm)
include(GNUInstallDirs)

include(CTest)
if(BUILD_TESTING)
add_subdirectory(test)
option(GLM_ENABLE_CXX_98 "Enable C++ 98" OFF)
option(GLM_ENABLE_CXX_11 "Enable C++ 11" OFF)
option(GLM_ENABLE_CXX_14 "Enable C++ 14" OFF)
option(GLM_ENABLE_CXX_17 "Enable C++ 17" OFF)
option(GLM_ENABLE_CXX_20 "Enable C++ 20" OFF)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(GLM_ENABLE_CXX_20)
set(CMAKE_CXX_STANDARD 20)
add_definitions(-DGLM_FORCE_CXX20)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(STATUS "GLM: Disable -Wc++98-compat warnings")
add_compile_options(-Wno-c++98-compat)
add_compile_options(-Wno-c++98-compat-pedantic)
endif()
if(NOT GLM_QUIET)
message(STATUS "GLM: Build with C++20 features")
endif()

endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
elseif(GLM_ENABLE_CXX_17)
set(CMAKE_CXX_STANDARD 17)
add_definitions(-DGLM_FORCE_CXX17)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(STATUS "GLM: Disable -Wc++98-compat warnings")
add_compile_options(-Wno-c++98-compat)
add_compile_options(-Wno-c++98-compat-pedantic)
endif()
if(NOT GLM_QUIET)
message(STATUS "GLM: Build with C++17 features")
endif()

elseif(GLM_ENABLE_CXX_14)
set(CMAKE_CXX_STANDARD 14)
add_definitions(-DGLM_FORCE_CXX14)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(STATUS "GLM: Disable -Wc++98-compat warnings")
add_compile_options(-Wno-c++98-compat)
add_compile_options(-Wno-c++98-compat-pedantic)
endif()
if(NOT GLM_QUIET)
message(STATUS "GLM: Build with C++14 features")
endif()

elseif(GLM_ENABLE_CXX_11)
set(CMAKE_CXX_STANDARD 11)
add_definitions(-DGLM_FORCE_CXX11)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(STATUS "GLM: Disable -Wc++98-compat warnings")
add_compile_options(-Wno-c++98-compat)
add_compile_options(-Wno-c++98-compat-pedantic)
endif()
if(NOT GLM_QUIET)
message(STATUS "GLM: Build with C++11 features")
endif()

elseif(GLM_ENABLE_CXX_98)
set(CMAKE_CXX_STANDARD 98)
add_definitions(-DGLM_FORCE_CXX98)
if(NOT GLM_QUIET)
message(STATUS "GLM: Build with C++98 features")
endif()

else()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(STATUS "GLM: Disable -Wc++98-compat warnings")
add_compile_options(-Wno-c++98-compat)
add_compile_options(-Wno-c++98-compat-pedantic)
endif()
if(NOT GLM_QUIET)
message(STATUS "GLM: Build with C++ features auto detection")
endif()

endif()

option(GLM_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF)
option(GLM_DISABLE_AUTO_DETECTION "Disable platform, compiler, arch and C++ language detection" OFF)

if(GLM_DISABLE_AUTO_DETECTION)
add_definitions(-DGLM_FORCE_PLATFORM_UNKNOWN -DGLM_FORCE_COMPILER_UNKNOWN -DGLM_FORCE_ARCH_UNKNOWN -DGLM_FORCE_CXX_UNKNOWN)
endif()

if(GLM_ENABLE_LANG_EXTENSIONS)
set(CMAKE_CXX_EXTENSIONS ON)
if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
add_compile_options(-fms-extensions)
endif()
message(STATUS "GLM: Build with C++ language extensions")
else()
set(CMAKE_CXX_EXTENSIONS OFF)
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
add_compile_options(/Za)
if(MSVC15)
add_compile_options(/permissive-)
endif()
endif()
endif()

option(GLM_ENABLE_FAST_MATH "Enable fast math optimizations" OFF)
if(GLM_ENABLE_FAST_MATH)
if(NOT GLM_QUIET)
message(STATUS "GLM: Build with fast math optimizations")
endif()

if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
add_compile_options(-ffast-math)

elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
add_compile_options(/fp:fast)
endif()
else()
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
add_compile_options(/fp:precise)
endif()
endif()

option(GLM_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
option(GLM_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF)
option(GLM_ENABLE_SIMD_SSSE3 "Enable SSSE3 optimizations" OFF)
option(GLM_ENABLE_SIMD_SSE4_1 "Enable SSE 4.1 optimizations" OFF)
option(GLM_ENABLE_SIMD_SSE4_2 "Enable SSE 4.2 optimizations" OFF)
option(GLM_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
option(GLM_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
option(GLM_FORCE_PURE "Force 'pure' instructions" OFF)

if(GLM_FORCE_PURE)
add_definitions(-DGLM_FORCE_PURE)

if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
add_compile_options(-mfpmath=387)
endif()
message(STATUS "GLM: No SIMD instruction set")

elseif(GLM_ENABLE_SIMD_AVX2)
add_definitions(-DGLM_FORCE_INTRINSICS)

if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
add_compile_options(-mavx2)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
add_compile_options(/QxAVX2)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
add_compile_options(/arch:AVX2)
endif()
message(STATUS "GLM: AVX2 instruction set")

elseif(GLM_ENABLE_SIMD_AVX)
add_definitions(-DGLM_FORCE_INTRINSICS)

if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
add_compile_options(-mavx)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
add_compile_options(/QxAVX)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
add_compile_options(/arch:AVX)
endif()
message(STATUS "GLM: AVX instruction set")

elseif(GLM_ENABLE_SIMD_SSE4_2)
add_definitions(-DGLM_FORCE_INTRINSICS)

if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
add_compile_options(-msse4.2)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
add_compile_options(/QxSSE4.2)
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
add_compile_options(/arch:SSE2) # VC doesn't support SSE4.2
endif()
message(STATUS "GLM: SSE4.2 instruction set")

elseif(GLM_ENABLE_SIMD_SSE4_1)
add_definitions(-DGLM_FORCE_INTRINSICS)

if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
add_compile_options(-msse4.1)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
add_compile_options(/QxSSE4.1)
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
add_compile_options(/arch:SSE2) # VC doesn't support SSE4.1
endif()
message(STATUS "GLM: SSE4.1 instruction set")

elseif(GLM_ENABLE_SIMD_SSSE3)
add_definitions(-DGLM_FORCE_INTRINSICS)

if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
add_compile_options(-mssse3)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
add_compile_options(/QxSSSE3)
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
add_compile_options(/arch:SSE2) # VC doesn't support SSSE3
endif()
message(STATUS "GLM: SSSE3 instruction set")

elseif(GLM_ENABLE_SIMD_SSE3)
add_definitions(-DGLM_FORCE_INTRINSICS)

if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
add_compile_options(-msse3)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
add_compile_options(/QxSSE3)
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
add_compile_options(/arch:SSE2) # VC doesn't support SSE3
endif()
message(STATUS "GLM: SSE3 instruction set")

elseif(GLM_ENABLE_SIMD_SSE2)
add_definitions(-DGLM_FORCE_INTRINSICS)

if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
add_compile_options(-msse2)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
add_compile_options(/QxSSE2)
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
add_compile_options(/arch:SSE2)
endif()
message(STATUS "GLM: SSE2 instruction set")
endif()

add_subdirectory(glm)

if (GLM_BUILD_TESTS)
include(CTest)
add_subdirectory(test)
endif()

if (GLM_BUILD_INSTALL)
include(CPack)

install(TARGETS glm-header-only glm EXPORT glm)
install(
DIRECTORY glm
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
PATTERN "CMakeLists.txt" EXCLUDE
)
install(
EXPORT glm
NAMESPACE glm::
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/glm"
FILE glmConfig.cmake
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
COMPATIBILITY AnyNewerVersion
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/glm"
)

if (NOT TARGET uninstall)
configure_file(cmake/cmake_uninstall.cmake.in
cmake_uninstall.cmake IMMEDIATE @ONLY)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY
)

add_custom_target(uninstall
"${CMAKE_COMMAND}" -P
"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake")
add_custom_target(
uninstall
"${CMAKE_COMMAND}" -P
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
)
endif()
Loading

0 comments on commit 894e39f

Please sign in to comment.