From 6d06ce66400160d65391e816618d4c728decec56 Mon Sep 17 00:00:00 2001 From: ubuntu20 Date: Wed, 21 Oct 2020 15:22:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=89=E7=BA=BF=E8=BF=BD=E8=B8=AA=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Debug/Scene.obj | Bin 0 -> 22222 bytes Debug/main.obj | Bin 0 -> 170936 bytes Debug/raytracing.exe | Bin 0 -> 65024 bytes Debug/raytracing.ilk | Bin 0 -> 442496 bytes Debug/raytracing.log | 4 + Debug/raytracing.pdb | Bin 0 -> 634880 bytes Debug/raytracing.tlog/CL.command.1.tlog | Bin 0 -> 1776 bytes Debug/raytracing.tlog/CL.read.1.tlog | Bin 0 -> 93296 bytes Debug/raytracing.tlog/CL.write.1.tlog | Bin 0 -> 1014 bytes Debug/raytracing.tlog/link.command.1.tlog | Bin 0 -> 1262 bytes Debug/raytracing.tlog/link.read.1.tlog | Bin 0 -> 3520 bytes Debug/raytracing.tlog/link.write.1.tlog | Bin 0 -> 494 bytes .../raytracing.tlog/raytracing.lastbuildstate | 2 + Debug/util.obj | Bin 0 -> 24984 bytes Debug/vc141.idb | Bin 0 -> 830464 bytes Debug/vc141.pdb | Bin 0 -> 610304 bytes Glm/CMakeLists.txt | 43 + Glm/core/_detail.hpp | 482 + Glm/core/_fixes.hpp | 55 + Glm/core/_swizzle.hpp | 861 + Glm/core/_swizzle_func.hpp | 787 + Glm/core/_vectorize.hpp | 159 + Glm/core/dummy.cpp | 35 + Glm/core/func_common.hpp | 430 + Glm/core/func_common.inl | 1226 + Glm/core/func_exponential.hpp | 123 + Glm/core/func_exponential.inl | 156 + Glm/core/func_geometric.hpp | 138 + Glm/core/func_geometric.inl | 321 + Glm/core/func_integer.hpp | 201 + Glm/core/func_integer.inl | 648 + Glm/core/func_matrix.hpp | 150 + Glm/core/func_matrix.inl | 582 + Glm/core/func_noise.hpp | 87 + Glm/core/func_noise.inl | 364 + Glm/core/func_packing.hpp | 193 + Glm/core/func_packing.inl | 208 + Glm/core/func_trigonometric.hpp | 203 + Glm/core/func_trigonometric.inl | 244 + Glm/core/func_vector_relational.hpp | 138 + Glm/core/func_vector_relational.inl | 178 + Glm/core/hint.hpp | 40 + Glm/core/intrinsic_common.hpp | 89 + Glm/core/intrinsic_common.inl | 313 + Glm/core/intrinsic_exponential.hpp | 79 + Glm/core/intrinsic_exponential.inl | 27 + Glm/core/intrinsic_geometric.hpp | 76 + Glm/core/intrinsic_geometric.inl | 146 + Glm/core/intrinsic_matrix.hpp | 69 + Glm/core/intrinsic_matrix.inl | 1070 + Glm/core/intrinsic_trigonometric.hpp | 48 + Glm/core/intrinsic_trigonometric.inl | 27 + Glm/core/intrinsic_vector_relational.hpp | 48 + Glm/core/intrinsic_vector_relational.inl | 366 + Glm/core/setup.hpp | 694 + Glm/core/type.hpp | 341 + Glm/core/type_float.hpp | 84 + Glm/core/type_gentype.hpp | 169 + Glm/core/type_gentype.inl | 366 + Glm/core/type_half.hpp | 118 + Glm/core/type_half.inl | 421 + Glm/core/type_int.hpp | 142 + Glm/core/type_mat.hpp | 41 + Glm/core/type_mat.inl | 27 + Glm/core/type_mat2x2.hpp | 314 + Glm/core/type_mat2x2.inl | 688 + Glm/core/type_mat2x3.hpp | 258 + Glm/core/type_mat2x3.inl | 633 + Glm/core/type_mat2x4.hpp | 260 + Glm/core/type_mat2x4.inl | 652 + Glm/core/type_mat3x2.hpp | 265 + Glm/core/type_mat3x2.inl | 670 + Glm/core/type_mat3x3.hpp | 318 + Glm/core/type_mat3x3.inl | 800 + Glm/core/type_mat3x4.hpp | 266 + Glm/core/type_mat3x4.inl | 700 + Glm/core/type_mat4x2.hpp | 270 + Glm/core/type_mat4x2.inl | 716 + Glm/core/type_mat4x3.hpp | 268 + Glm/core/type_mat4x3.inl | 725 + Glm/core/type_mat4x4.hpp | 320 + Glm/core/type_mat4x4.inl | 893 + Glm/core/type_size.hpp | 43 + Glm/core/type_vec.hpp | 41 + Glm/core/type_vec.inl | 27 + Glm/core/type_vec1.hpp | 212 + Glm/core/type_vec1.inl | 928 + Glm/core/type_vec2.hpp | 317 + Glm/core/type_vec2.inl | 998 + Glm/core/type_vec3.hpp | 342 + Glm/core/type_vec3.inl | 1122 + Glm/core/type_vec4.hpp | 399 + Glm/core/type_vec4.inl | 1348 ++ Glm/ext.hpp | 145 + Glm/glm.hpp | 129 + Glm/gtc/constants.hpp | 186 + Glm/gtc/constants.inl | 186 + Glm/gtc/epsilon.hpp | 94 + Glm/gtc/epsilon.inl | 286 + Glm/gtc/half_float.hpp | 454 + Glm/gtc/half_float.inl | 1050 + Glm/gtc/matrix_access.hpp | 87 + Glm/gtc/matrix_access.inl | 80 + Glm/gtc/matrix_integer.hpp | 506 + Glm/gtc/matrix_inverse.hpp | 74 + Glm/gtc/matrix_inverse.inl | 159 + Glm/gtc/matrix_transform.hpp | 291 + Glm/gtc/matrix_transform.inl | 434 + Glm/gtc/noise.hpp | 80 + Glm/gtc/noise.inl | 867 + Glm/gtc/quaternion.hpp | 381 + Glm/gtc/quaternion.inl | 792 + Glm/gtc/random.hpp | 114 + Glm/gtc/random.inl | 170 + Glm/gtc/reciprocal.hpp | 133 + Glm/gtc/reciprocal.inl | 199 + Glm/gtc/swizzle.hpp | 375 + Glm/gtc/swizzle.inl | 116 + Glm/gtc/type_precision.hpp | 669 + Glm/gtc/type_precision.inl | 32 + Glm/gtc/type_ptr.hpp | 169 + Glm/gtc/type_ptr.inl | 473 + Glm/gtc/ulp.hpp | 90 + Glm/gtc/ulp.inl | 318 + Glm/gtx/associated_min_max.hpp | 106 + Glm/gtx/associated_min_max.inl | 912 + Glm/gtx/bit.hpp | 140 + Glm/gtx/bit.inl | 600 + Glm/gtx/closest_point.hpp | 66 + Glm/gtx/closest_point.inl | 36 + Glm/gtx/color_cast.hpp | 124 + Glm/gtx/color_cast.inl | 733 + Glm/gtx/color_space.hpp | 96 + Glm/gtx/color_space.inl | 149 + Glm/gtx/color_space_YCoCg.hpp | 84 + Glm/gtx/color_space_YCoCg.inl | 64 + Glm/gtx/compatibility.hpp | 176 + Glm/gtx/compatibility.inl | 60 + Glm/gtx/component_wise.hpp | 82 + Glm/gtx/component_wise.inl | 47 + Glm/gtx/constants.hpp | 33 + Glm/gtx/epsilon.hpp | 29 + Glm/gtx/euler_angles.hpp | 156 + Glm/gtx/euler_angles.inl | 244 + Glm/gtx/extend.hpp | 66 + Glm/gtx/extend.inl | 55 + Glm/gtx/extented_min_max.hpp | 194 + Glm/gtx/extented_min_max.inl | 178 + Glm/gtx/fast_exponential.hpp | 99 + Glm/gtx/fast_exponential.inl | 148 + Glm/gtx/fast_square_root.hpp | 85 + Glm/gtx/fast_square_root.inl | 136 + Glm/gtx/fast_trigonometry.hpp | 100 + Glm/gtx/fast_trigonometry.inl | 75 + Glm/gtx/gradient_paint.hpp | 76 + Glm/gtx/gradient_paint.inl | 43 + Glm/gtx/handed_coordinate_space.hpp | 74 + Glm/gtx/handed_coordinate_space.inl | 33 + Glm/gtx/inertia.hpp | 115 + Glm/gtx/inertia.inl | 114 + Glm/gtx/int_10_10_10_2.hpp | 64 + Glm/gtx/int_10_10_10_2.inl | 19 + Glm/gtx/integer.hpp | 104 + Glm/gtx/integer.inl | 203 + Glm/gtx/intersect.hpp | 102 + Glm/gtx/intersect.inl | 196 + Glm/gtx/log_base.hpp | 65 + Glm/gtx/log_base.inl | 24 + Glm/gtx/matrix_cross_product.hpp | 71 + Glm/gtx/matrix_cross_product.inl | 44 + Glm/gtx/matrix_interpolation.hpp | 88 + Glm/gtx/matrix_interpolation.inl | 131 + Glm/gtx/matrix_major_storage.hpp | 143 + Glm/gtx/matrix_major_storage.inl | 173 + Glm/gtx/matrix_operation.hpp | 112 + Glm/gtx/matrix_operation.inl | 124 + Glm/gtx/matrix_query.hpp | 117 + Glm/gtx/matrix_query.inl | 154 + Glm/gtx/mixed_product.hpp | 65 + Glm/gtx/mixed_product.inl | 22 + Glm/gtx/multiple.hpp | 73 + Glm/gtx/multiple.inl | 128 + Glm/gtx/noise.hpp | 29 + Glm/gtx/norm.hpp | 133 + Glm/gtx/norm.inl | 156 + Glm/gtx/normal.hpp | 67 + Glm/gtx/normal.inl | 22 + Glm/gtx/normalize_dot.hpp | 76 + Glm/gtx/normalize_dot.inl | 115 + Glm/gtx/number_precision.hpp | 88 + Glm/gtx/number_precision.inl | 13 + Glm/gtx/ocl_type.hpp | 132 + Glm/gtx/ocl_type.inl | 27 + Glm/gtx/optimum_pow.hpp | 91 + Glm/gtx/optimum_pow.inl | 58 + Glm/gtx/orthonormalize.hpp | 72 + Glm/gtx/orthonormalize.inl | 43 + Glm/gtx/perpendicular.hpp | 67 + Glm/gtx/perpendicular.inl | 21 + Glm/gtx/polar_coordinates.hpp | 72 + Glm/gtx/polar_coordinates.inl | 55 + Glm/gtx/projection.hpp | 65 + Glm/gtx/projection.inl | 21 + Glm/gtx/quaternion.hpp | 195 + Glm/gtx/quaternion.inl | 208 + Glm/gtx/random.hpp | 29 + Glm/gtx/raw_data.hpp | 75 + Glm/gtx/raw_data.inl | 11 + Glm/gtx/reciprocal.hpp | 26 + Glm/gtx/rotate_vector.hpp | 132 + Glm/gtx/rotate_vector.inl | 215 + Glm/gtx/simd_mat4.hpp | 206 + Glm/gtx/simd_mat4.inl | 590 + Glm/gtx/simd_vec4.hpp | 517 + Glm/gtx/simd_vec4.inl | 727 + Glm/gtx/spline.hpp | 90 + Glm/gtx/spline.inl | 70 + Glm/gtx/std_based_type.hpp | 83 + Glm/gtx/std_based_type.inl | 13 + Glm/gtx/string_cast.hpp | 70 + Glm/gtx/string_cast.inl | 588 + Glm/gtx/transform.hpp | 131 + Glm/gtx/transform.inl | 90 + Glm/gtx/transform2.hpp | 135 + Glm/gtx/transform2.inl | 154 + Glm/gtx/ulp.hpp | 29 + Glm/gtx/unsigned_int.hpp | 26 + Glm/gtx/unsigned_int.inl | 13 + Glm/gtx/vec1.hpp | 137 + Glm/gtx/vec1.inl | 27 + Glm/gtx/vector_access.hpp | 85 + Glm/gtx/vector_access.inl | 53 + Glm/gtx/vector_angle.hpp | 88 + Glm/gtx/vector_angle.inl | 57 + Glm/gtx/vector_query.hpp | 112 + Glm/gtx/vector_query.inl | 164 + Glm/gtx/verbose_operator.hpp | 83 + Glm/gtx/verbose_operator.inl | 124 + Glm/gtx/wrap.hpp | 73 + Glm/gtx/wrap.inl | 165 + Glm/virtrev/xstream.hpp | 166 + Scene.cpp | 16 + Scene.h | 4 + glew.h | 19753 ++++++++++++++++ glew32.dll | Bin 0 -> 403968 bytes glew32.lib | Bin 0 -> 619228 bytes main.cpp | 95 + raytracing.sln | 31 + raytracing.vcxproj | 140 + raytracing.vcxproj.filters | 36 + raytracing.vcxproj.user | 4 + util.cpp | 33 + util.h | 18 + 253 files changed, 71811 insertions(+) create mode 100644 Debug/Scene.obj create mode 100644 Debug/main.obj create mode 100644 Debug/raytracing.exe create mode 100644 Debug/raytracing.ilk create mode 100644 Debug/raytracing.log create mode 100644 Debug/raytracing.pdb create mode 100644 Debug/raytracing.tlog/CL.command.1.tlog create mode 100644 Debug/raytracing.tlog/CL.read.1.tlog create mode 100644 Debug/raytracing.tlog/CL.write.1.tlog create mode 100644 Debug/raytracing.tlog/link.command.1.tlog create mode 100644 Debug/raytracing.tlog/link.read.1.tlog create mode 100644 Debug/raytracing.tlog/link.write.1.tlog create mode 100644 Debug/raytracing.tlog/raytracing.lastbuildstate create mode 100644 Debug/util.obj create mode 100644 Debug/vc141.idb create mode 100644 Debug/vc141.pdb create mode 100644 Glm/CMakeLists.txt create mode 100644 Glm/core/_detail.hpp create mode 100644 Glm/core/_fixes.hpp create mode 100644 Glm/core/_swizzle.hpp create mode 100644 Glm/core/_swizzle_func.hpp create mode 100644 Glm/core/_vectorize.hpp create mode 100644 Glm/core/dummy.cpp create mode 100644 Glm/core/func_common.hpp create mode 100644 Glm/core/func_common.inl create mode 100644 Glm/core/func_exponential.hpp create mode 100644 Glm/core/func_exponential.inl create mode 100644 Glm/core/func_geometric.hpp create mode 100644 Glm/core/func_geometric.inl create mode 100644 Glm/core/func_integer.hpp create mode 100644 Glm/core/func_integer.inl create mode 100644 Glm/core/func_matrix.hpp create mode 100644 Glm/core/func_matrix.inl create mode 100644 Glm/core/func_noise.hpp create mode 100644 Glm/core/func_noise.inl create mode 100644 Glm/core/func_packing.hpp create mode 100644 Glm/core/func_packing.inl create mode 100644 Glm/core/func_trigonometric.hpp create mode 100644 Glm/core/func_trigonometric.inl create mode 100644 Glm/core/func_vector_relational.hpp create mode 100644 Glm/core/func_vector_relational.inl create mode 100644 Glm/core/hint.hpp create mode 100644 Glm/core/intrinsic_common.hpp create mode 100644 Glm/core/intrinsic_common.inl create mode 100644 Glm/core/intrinsic_exponential.hpp create mode 100644 Glm/core/intrinsic_exponential.inl create mode 100644 Glm/core/intrinsic_geometric.hpp create mode 100644 Glm/core/intrinsic_geometric.inl create mode 100644 Glm/core/intrinsic_matrix.hpp create mode 100644 Glm/core/intrinsic_matrix.inl create mode 100644 Glm/core/intrinsic_trigonometric.hpp create mode 100644 Glm/core/intrinsic_trigonometric.inl create mode 100644 Glm/core/intrinsic_vector_relational.hpp create mode 100644 Glm/core/intrinsic_vector_relational.inl create mode 100644 Glm/core/setup.hpp create mode 100644 Glm/core/type.hpp create mode 100644 Glm/core/type_float.hpp create mode 100644 Glm/core/type_gentype.hpp create mode 100644 Glm/core/type_gentype.inl create mode 100644 Glm/core/type_half.hpp create mode 100644 Glm/core/type_half.inl create mode 100644 Glm/core/type_int.hpp create mode 100644 Glm/core/type_mat.hpp create mode 100644 Glm/core/type_mat.inl create mode 100644 Glm/core/type_mat2x2.hpp create mode 100644 Glm/core/type_mat2x2.inl create mode 100644 Glm/core/type_mat2x3.hpp create mode 100644 Glm/core/type_mat2x3.inl create mode 100644 Glm/core/type_mat2x4.hpp create mode 100644 Glm/core/type_mat2x4.inl create mode 100644 Glm/core/type_mat3x2.hpp create mode 100644 Glm/core/type_mat3x2.inl create mode 100644 Glm/core/type_mat3x3.hpp create mode 100644 Glm/core/type_mat3x3.inl create mode 100644 Glm/core/type_mat3x4.hpp create mode 100644 Glm/core/type_mat3x4.inl create mode 100644 Glm/core/type_mat4x2.hpp create mode 100644 Glm/core/type_mat4x2.inl create mode 100644 Glm/core/type_mat4x3.hpp create mode 100644 Glm/core/type_mat4x3.inl create mode 100644 Glm/core/type_mat4x4.hpp create mode 100644 Glm/core/type_mat4x4.inl create mode 100644 Glm/core/type_size.hpp create mode 100644 Glm/core/type_vec.hpp create mode 100644 Glm/core/type_vec.inl create mode 100644 Glm/core/type_vec1.hpp create mode 100644 Glm/core/type_vec1.inl create mode 100644 Glm/core/type_vec2.hpp create mode 100644 Glm/core/type_vec2.inl create mode 100644 Glm/core/type_vec3.hpp create mode 100644 Glm/core/type_vec3.inl create mode 100644 Glm/core/type_vec4.hpp create mode 100644 Glm/core/type_vec4.inl create mode 100644 Glm/ext.hpp create mode 100644 Glm/glm.hpp create mode 100644 Glm/gtc/constants.hpp create mode 100644 Glm/gtc/constants.inl create mode 100644 Glm/gtc/epsilon.hpp create mode 100644 Glm/gtc/epsilon.inl create mode 100644 Glm/gtc/half_float.hpp create mode 100644 Glm/gtc/half_float.inl create mode 100644 Glm/gtc/matrix_access.hpp create mode 100644 Glm/gtc/matrix_access.inl create mode 100644 Glm/gtc/matrix_integer.hpp create mode 100644 Glm/gtc/matrix_inverse.hpp create mode 100644 Glm/gtc/matrix_inverse.inl create mode 100644 Glm/gtc/matrix_transform.hpp create mode 100644 Glm/gtc/matrix_transform.inl create mode 100644 Glm/gtc/noise.hpp create mode 100644 Glm/gtc/noise.inl create mode 100644 Glm/gtc/quaternion.hpp create mode 100644 Glm/gtc/quaternion.inl create mode 100644 Glm/gtc/random.hpp create mode 100644 Glm/gtc/random.inl create mode 100644 Glm/gtc/reciprocal.hpp create mode 100644 Glm/gtc/reciprocal.inl create mode 100644 Glm/gtc/swizzle.hpp create mode 100644 Glm/gtc/swizzle.inl create mode 100644 Glm/gtc/type_precision.hpp create mode 100644 Glm/gtc/type_precision.inl create mode 100644 Glm/gtc/type_ptr.hpp create mode 100644 Glm/gtc/type_ptr.inl create mode 100644 Glm/gtc/ulp.hpp create mode 100644 Glm/gtc/ulp.inl create mode 100644 Glm/gtx/associated_min_max.hpp create mode 100644 Glm/gtx/associated_min_max.inl create mode 100644 Glm/gtx/bit.hpp create mode 100644 Glm/gtx/bit.inl create mode 100644 Glm/gtx/closest_point.hpp create mode 100644 Glm/gtx/closest_point.inl create mode 100644 Glm/gtx/color_cast.hpp create mode 100644 Glm/gtx/color_cast.inl create mode 100644 Glm/gtx/color_space.hpp create mode 100644 Glm/gtx/color_space.inl create mode 100644 Glm/gtx/color_space_YCoCg.hpp create mode 100644 Glm/gtx/color_space_YCoCg.inl create mode 100644 Glm/gtx/compatibility.hpp create mode 100644 Glm/gtx/compatibility.inl create mode 100644 Glm/gtx/component_wise.hpp create mode 100644 Glm/gtx/component_wise.inl create mode 100644 Glm/gtx/constants.hpp create mode 100644 Glm/gtx/epsilon.hpp create mode 100644 Glm/gtx/euler_angles.hpp create mode 100644 Glm/gtx/euler_angles.inl create mode 100644 Glm/gtx/extend.hpp create mode 100644 Glm/gtx/extend.inl create mode 100644 Glm/gtx/extented_min_max.hpp create mode 100644 Glm/gtx/extented_min_max.inl create mode 100644 Glm/gtx/fast_exponential.hpp create mode 100644 Glm/gtx/fast_exponential.inl create mode 100644 Glm/gtx/fast_square_root.hpp create mode 100644 Glm/gtx/fast_square_root.inl create mode 100644 Glm/gtx/fast_trigonometry.hpp create mode 100644 Glm/gtx/fast_trigonometry.inl create mode 100644 Glm/gtx/gradient_paint.hpp create mode 100644 Glm/gtx/gradient_paint.inl create mode 100644 Glm/gtx/handed_coordinate_space.hpp create mode 100644 Glm/gtx/handed_coordinate_space.inl create mode 100644 Glm/gtx/inertia.hpp create mode 100644 Glm/gtx/inertia.inl create mode 100644 Glm/gtx/int_10_10_10_2.hpp create mode 100644 Glm/gtx/int_10_10_10_2.inl create mode 100644 Glm/gtx/integer.hpp create mode 100644 Glm/gtx/integer.inl create mode 100644 Glm/gtx/intersect.hpp create mode 100644 Glm/gtx/intersect.inl create mode 100644 Glm/gtx/log_base.hpp create mode 100644 Glm/gtx/log_base.inl create mode 100644 Glm/gtx/matrix_cross_product.hpp create mode 100644 Glm/gtx/matrix_cross_product.inl create mode 100644 Glm/gtx/matrix_interpolation.hpp create mode 100644 Glm/gtx/matrix_interpolation.inl create mode 100644 Glm/gtx/matrix_major_storage.hpp create mode 100644 Glm/gtx/matrix_major_storage.inl create mode 100644 Glm/gtx/matrix_operation.hpp create mode 100644 Glm/gtx/matrix_operation.inl create mode 100644 Glm/gtx/matrix_query.hpp create mode 100644 Glm/gtx/matrix_query.inl create mode 100644 Glm/gtx/mixed_product.hpp create mode 100644 Glm/gtx/mixed_product.inl create mode 100644 Glm/gtx/multiple.hpp create mode 100644 Glm/gtx/multiple.inl create mode 100644 Glm/gtx/noise.hpp create mode 100644 Glm/gtx/norm.hpp create mode 100644 Glm/gtx/norm.inl create mode 100644 Glm/gtx/normal.hpp create mode 100644 Glm/gtx/normal.inl create mode 100644 Glm/gtx/normalize_dot.hpp create mode 100644 Glm/gtx/normalize_dot.inl create mode 100644 Glm/gtx/number_precision.hpp create mode 100644 Glm/gtx/number_precision.inl create mode 100644 Glm/gtx/ocl_type.hpp create mode 100644 Glm/gtx/ocl_type.inl create mode 100644 Glm/gtx/optimum_pow.hpp create mode 100644 Glm/gtx/optimum_pow.inl create mode 100644 Glm/gtx/orthonormalize.hpp create mode 100644 Glm/gtx/orthonormalize.inl create mode 100644 Glm/gtx/perpendicular.hpp create mode 100644 Glm/gtx/perpendicular.inl create mode 100644 Glm/gtx/polar_coordinates.hpp create mode 100644 Glm/gtx/polar_coordinates.inl create mode 100644 Glm/gtx/projection.hpp create mode 100644 Glm/gtx/projection.inl create mode 100644 Glm/gtx/quaternion.hpp create mode 100644 Glm/gtx/quaternion.inl create mode 100644 Glm/gtx/random.hpp create mode 100644 Glm/gtx/raw_data.hpp create mode 100644 Glm/gtx/raw_data.inl create mode 100644 Glm/gtx/reciprocal.hpp create mode 100644 Glm/gtx/rotate_vector.hpp create mode 100644 Glm/gtx/rotate_vector.inl create mode 100644 Glm/gtx/simd_mat4.hpp create mode 100644 Glm/gtx/simd_mat4.inl create mode 100644 Glm/gtx/simd_vec4.hpp create mode 100644 Glm/gtx/simd_vec4.inl create mode 100644 Glm/gtx/spline.hpp create mode 100644 Glm/gtx/spline.inl create mode 100644 Glm/gtx/std_based_type.hpp create mode 100644 Glm/gtx/std_based_type.inl create mode 100644 Glm/gtx/string_cast.hpp create mode 100644 Glm/gtx/string_cast.inl create mode 100644 Glm/gtx/transform.hpp create mode 100644 Glm/gtx/transform.inl create mode 100644 Glm/gtx/transform2.hpp create mode 100644 Glm/gtx/transform2.inl create mode 100644 Glm/gtx/ulp.hpp create mode 100644 Glm/gtx/unsigned_int.hpp create mode 100644 Glm/gtx/unsigned_int.inl create mode 100644 Glm/gtx/vec1.hpp create mode 100644 Glm/gtx/vec1.inl create mode 100644 Glm/gtx/vector_access.hpp create mode 100644 Glm/gtx/vector_access.inl create mode 100644 Glm/gtx/vector_angle.hpp create mode 100644 Glm/gtx/vector_angle.inl create mode 100644 Glm/gtx/vector_query.hpp create mode 100644 Glm/gtx/vector_query.inl create mode 100644 Glm/gtx/verbose_operator.hpp create mode 100644 Glm/gtx/verbose_operator.inl create mode 100644 Glm/gtx/wrap.hpp create mode 100644 Glm/gtx/wrap.inl create mode 100644 Glm/virtrev/xstream.hpp create mode 100644 Scene.cpp create mode 100644 Scene.h create mode 100644 glew.h create mode 100644 glew32.dll create mode 100644 glew32.lib create mode 100644 main.cpp create mode 100644 raytracing.sln create mode 100644 raytracing.vcxproj create mode 100644 raytracing.vcxproj.filters create mode 100644 raytracing.vcxproj.user create mode 100644 util.cpp create mode 100644 util.h diff --git a/Debug/Scene.obj b/Debug/Scene.obj new file mode 100644 index 0000000000000000000000000000000000000000..3d97a469be5ff96f01316d978d95fabc6b413df8 GIT binary patch literal 22222 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 literal 0 HcmV?d00001 diff --git a/Debug/main.obj b/Debug/main.obj new file mode 100644 index 0000000000000000000000000000000000000000..f0ff520be7dfaf7d6bc6e0bf5e3f7e99f8ff878e GIT binary patch literal 170936 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 Yk=1BHdNLW7x%7-Oe0%=1G7S6w2U@}G8UO$Q literal 0 HcmV?d00001 diff --git a/Debug/raytracing.exe b/Debug/raytracing.exe new file mode 100644 index 0000000000000000000000000000000000000000..886211af4b50baadf707639ea8211fca77f24df6 GIT binary patch literal 65024 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 literal 0 HcmV?d00001 diff --git a/Debug/raytracing.ilk b/Debug/raytracing.ilk new file mode 100644 index 0000000000000000000000000000000000000000..03708057621a576b3c564b4b505c7740ab224c9f GIT binary patch literal 442496 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 UE2sw=IH%o}LUcNQ+rlvZFG=zzp8x;= literal 0 HcmV?d00001 diff --git a/Debug/raytracing.log b/Debug/raytracing.log new file mode 100644 index 0000000..6056ed0 --- /dev/null +++ b/Debug/raytracing.log @@ -0,0 +1,4 @@ +锘 raytracing.vcxproj -> D:\dev\cpp\raytracing\Debug\raytracing.exe + Microsoft (R) COFF/PE Editor Version 14.16.27043.0 + Copyright (C) Microsoft Corporation. All rights reserved. + diff --git a/Debug/raytracing.pdb b/Debug/raytracing.pdb new file mode 100644 index 0000000000000000000000000000000000000000..660756ad8c117f11bf8659ff505cd50d99b73a02 GIT binary patch literal 634880 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

|&NfuEvayG45Rwfi=VL3| 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 VmrYV4Q>-R#zk9KTzFKqV)n`0O-v0mq literal 0 HcmV?d00001 diff --git a/Debug/raytracing.tlog/link.write.1.tlog b/Debug/raytracing.tlog/link.write.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..69cd0c719485e71c30357b6a8fcc6eb82305d256 GIT binary patch literal 494 zcmezWFOI>5!HOXUNV+nF0cmH303eKE2x4$#h-3%>)6NW@41NsmP*qM0p(7zS)o8TdouXIP2y$XBHLZq!axsfx;F#$&2?pn0EPhd M%?$wh-wA9k0G>}t1ONa4 literal 0 HcmV?d00001 diff --git a/Debug/raytracing.tlog/raytracing.lastbuildstate b/Debug/raytracing.tlog/raytracing.lastbuildstate new file mode 100644 index 0000000..4c01143 --- /dev/null +++ b/Debug/raytracing.tlog/raytracing.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.17763.0 +Debug|Win32|D:\dev\cpp\raytracing\| diff --git a/Debug/util.obj b/Debug/util.obj new file mode 100644 index 0000000000000000000000000000000000000000..05e14208abe86e68ad899e68b5eeeb53a8755bdd GIT binary patch literal 24984 zcmb_^3z%G0mG16Gl1_I*xDb$Mg&G3@s5u{#OJ-J12Qm<8W698;$u+fIy$}vnehsK3P$B#ak&4#&OWXSsxQ0P->t-skdL{K{n&juUf;JF6YxlkvKQ*zj;rgn=0KnzJF@m z$DEAB-lcR$+slQ647t8lcz{3fpx{_Yb6?pWwLcT@( zK3u2NLC|bSdvs^wQHx(Abh71Yr8>0+C~qx(Zv*@npn0R#!17n%_j;832xv|p0s*dN zxNGqve5a-%9j{vQ-3@pebU)R!Xc~{-?ox?){HxJV1fC13<7oR_d3=+TxW)&QZaM6v z88?$k-Yq~fP15+;k#VTs7okxNz{&6`FJkwgm-M5 zpD#|dPZoD?d{y8?b|{j`MHdmL;?bm)u(JT$Q7305qmfiH=OpuX=#sI?a$#O%9iIRiZi2K9i7`o!Eb7Qx>!CmIuser&CE=eMybQm&Yt$p-uA9-9bMg{ zyNlDKgEOV_a9{7}LEMped*NU~jZaOeE#sjr*EpdqS0y5$Ez>iTGka%3TXuEh9^Mk# zGEp4cJB^IR@zRd*$+1$Y2=dazWN1rj0{0=1MBRMSiKL=7k|s4U1&lpd;veM5g^wzh3ZX5tg}JFB_}*ARj%&tu92nm>Hs_Wly=P`FJ3ccDDj8EV8Q>?5hre;Wv!}Ctc49Xqfi$^vXv^62*yN#`SbPjBD9p{x%*_>MXXeTf z5^V)hoQ;37mMBh-PtH#iHvUPOj+G~;_Kc7IalEbhgT=|>*c|LAyO`Ck;`GGKfl_E^ zv0NJM>=<>tS|Hip(cZajTW@!J$LRd{T-mSJtIIHTLgXbFMq%QFvK%N*pP)?W?j}=h zJM!y3KNZ?CtV(m^O1uFwDwtL6&aB;rF+MnAwW+OCp3r`0+og0IE84z(iBc!2w3W%) zZq~`!>J$xJqk+*>!g7-8G!1Um;CL!x<(yPfovjgVJ`+2V&p5deS7-G3t<`ut8?n;1 zT8C`+ba6;XXY;Oh-oorzNK~h;&fA$0*B(wg87aq&S`cm{auHvz@i`}9yQ!EPx3W1m zGH4|SY_&ntG-w*SZ9AEB?Ic`=lN?ZIYJ$c^1i2B&b*e@#)5we+%h=gLwO+%Q8+as@ z2s=sJuv_7?vyyJo8gd3GuwPb_M&`42)=k>EU8&4Y!*iuZI$1YjMF#Dt3hC0CD;Ou4 z%~|od9YtL-BSsS~6$&q}o65KeE1d?H(>0e>!NP^g6ur8VJmBsA7L4s5b-&8U<`28YctV zC-Du{_-xXN#faae@r?$*%SlF4yIeGTF5^UK4cTE2J8eH zMpVGkmK(aTJqTk+WwNHE6$Te|vQ{{5yNR7{I+Mz!BB{73smV~WtHl$d58K7dPDqzj zuh9~%G<4E{=y_pOU2WFrW`p+Y<65ZGkUgvo$`sgQD2J@L!|rCx*v)4uf~_)ihGWcu zT|%gM%8H7iPz9?EofVCyk}yi6C3a(yoMcG+>R0M_iKba&Xa;k+w2KauVO-{>t!x&( zDC%k@N{=AZR+AwMyLHh=qq&r4Rq9;Lw9U}ulMy#-4cSrF0evsBQ~4#YHADk;jw+x_ zb4i!Ba)XFL#G~lm%92ku8FE%QY)9R2CbcU|BcoR##X3Wg&BpV?>Ou`a#lU@&&>jTF z=Vnv+WHgH?(c^LI656;uU`0k;IHWY1BulUC+v{nDIF`ypY!^+DabX`WoJlU96+b}1 z)*HIvM4XB?26Vc?_@d?PI6PRzV*SdUVJKs^4T1fhb*6!bX}zwKOy?zgBAv@h|NLih z8ql!xZLxQl3mt$hPK@|E<>MVVKnoIx@I=)cR4$Xx=CtP{romv435J7A^vLhWz@vOr z#vU-^54}8*rZ6H0cg7Q9IZucfG$`>dHV2F>@}})1ymDkj2Gs9@NU7XTP+`c)C&cp+ zSf_y*I|8#c;Cc;Cq@ww_Ep;Mwg9eM-F)L!r2uw_)#-KT1hmk=sE+Up`L?ji#c$k$T zmhj~oj$Un5per;K0W|D|-sCaZ0p@>BG?8_*eYnX~CSk?Jtr3mUx*BcoGFj^v;b4n# zC!x;LoEsLQqZuof6K6rjjf=3bkxXiU)+`N1l4XlXI4d)SFJFYr*h3Cv^9x_G2o2_` zm}-M)E1{q|6^Xc!s2zz*s}NLAP$Cvkog#)F z1>{r}f%O7J@RiL;^}ix4q6q(_YoJ(L%!=?jW#BBCFH!^I>MJ;uA}GcgL^V`U?27b% z5;+mqSiw1oblizx3ZG767!U!6p;SjSQu0lHkyj$ z8C-br4*eIYU|$ug0Xu1D(CiF$h=iS0kWSJc(2a<&w+h}%#w-rvQpbDY0U;s+$ss$# z;RMe3D!z3|fBiWMfC^Gh(#eG_%o`F|cX4uq8QY421Ks`yTB!yM*EHy`1*f0RAO_;J zKzo$)G!^_@Eh;Uux&UOySlb1uaXcHz4SN9$;}a|{xQGWJrMeh|4QMSWKb07WhcR`C z*l7lD7`2nBoEH$Lk3)@1dOJWppJ7NQrCN6D~Gr+oJVv| zTPLEyL*(q?9GYNN+pT8Fs+1{APZZ|Hc25?<^LzGS4TkN6wWQeFd#XAiXn#0d%WqdNY$hZP9>yr9K8u% z>4AM?GjcXp!(EvrF)C-KmPN=|#u^Z=wDf-gfl`Pks7GdF)GkH98lS!IPL}RhYCR%@v}Ya=DSM+hE194tKnKXtvP54?Sj8 zTS#M-a_z3J?N;aZK6m$6sZcIWfa0~)6uo^N;cZ=8x4YvrSa6yvyHka!@!3Oe38WWP zlSX>NR;+hxEJ!*tcL;==s|mMljfTS=+rx(NK&d>3l|4{ysHW@-$9nquI-;&2SX6-? z+Y0w}^hMmgSR;Vf}Y@mu=-5niPcQoQ+Rbsjf{DswctEVR#?TK}|SgRT@luG4& zbA_>q(%5Vfv>O-EM*FsQg!?+F1k}uFMm+W_6K- zieE}$MXc?;k?2-Z%$EvtpjcE)r`^%fvwdqXDT*`W2Z(AoAL3tBcJziSM z_Hb-lv}3Eqs?QcD$YPPComPj{+a2w7XC@0{^W~YPa#+^ZzUVfqgDo^RS=>9lRF3Z6 zzO9zMZM(~5o_;R#oCL%E4a^sVYR+}K%zJ~p_sCd9d=uZp=<^ap5VDdG6Dl&|A+(uL zJCjLeWDqB46+swb9ShS~j_d@kCNQ7endFSq7owFwr_;QzllMOHhRn2y?>fq*cOk5P zK`jVW+_e||egf_qk@83uL$@1=XC1Gb5{$9K19P@TugacH1fpdR!AZWjA|Hc+q>_aL zsze>kgMit?Fr-8w^uUB8Ue<67P?*3=rfwkblY*$UxHWBqW&@n;t1gs4;`-wfC#+$Y6Zu_E zG&iWW=sbgKEg)uG8(9G6_iJU14%2C^~{{fosla8flZuoc`%TUCL@w1@_i zQ7g{1nxRx2@r&B7vsKk$aW-$3iaALRqdZ43ml3h0vo;0m^M|v_+&RXzq_oW69)}^; zDbC-#*)QhuNv;TDnvu$5b}Yj$iRyzyXuc$eXT2Cjd_xeQ!9)bsE(DBfNYEH02-^cF zM=y_XxHrNq3zGR1D5#2Pd5{P*O`lGPxG2B^R|JWw3S?A_R!Cy1%{3tsHwB6HG7w4) zP`*}Et_)HJ$_|inNrgLK^mFK zVliq6(W&$vU&E_|RK7E)ka1y!%uWiDi9qxy?CBL+u9c8>O^{Y}m>t2IF=jkoZ)|^a% zS=1>(BC{4w$3pC>K`i2FC+67ErE2vp=(HfYSCY3p&9xiZ7GNAl#_NNWm|}ZN@V?4V z4`Qhu)SjhcauSW}sGeNT2-4A?!k+1$Q`oXVh>wUIt3}4X&kRzdz2T=bb~=^G`4y6B z1^J#8q?92DZr+>U<{Yly`{wqVAfcm2#EJ=V-bH?A2gy9QKzAdn*u-xL;xpDRBM?_a zNe~JWpect(qL@B<&V}?wK2_e!7CDG zZ0-^m!p*Np2pwXXQPx9Q^lM*{Fm7Ae=JEZ;g|A3Q_dAfmOxI}pq9CnSA|}HzGn`yp zMbMpg2RT#DnAX@5#AAaML3%NFgmZ|ioMghuCS?86cLv=-(sVu? zcd~=@d?J)QqHSwJWe`!s8 zm%(3F6W?v{m)FGi82lAA@mmf4%9{9IgYU12-)8VuO?;ohhil@u8+@cD-ZJ=TO?=qk z?V9+A!N+RiqXs`v6JLol2W#SE#Wtf5u24dHjhxSN@2?t`>w7R1|yKoSPGj?K2LGcu>Rh$DcGMrd3h~2?F`%TtjX+8n0z$$ z>9KM`{jp$wk|fxax1&k8KO^#Tv6Z>V;7xRh_a{Sw*ZS}Sb1#-7l|LO4Dg?a#NG~Qw z0)Hk{A>b54G%L%Vr17Ugo+#MN=aM!N{+ve;4i-lkqY>dxas%TN z`tuyG_*}-LlNeoA!#yg0q9atp*n`Gq0A|I;HvCzR;Qbjcx7nprupEDqBNW)a%VE`5 ztiut=jj-EaPCt7ax)SMFhH@ zcT&qgWW|FSK1=MO3Q{Xa_Kc*VnG?IGf;4O8bP7aZ=Ts0@GBOCGX8j1pj;VmfAW^L> z&pUWWx48IEk|v)eXLUlN3D{pruu>DqafuiLanqZLZPr*GtPrF$H&-5sZP8c;VzMto z;3^H2KqzCtt9>xeZzL>ON>f`Gc3|RZRKZGc%g`Q%r8mjuCN~(lGl$$wZ9H3C9@`tF zYX!ImU<1Qqs0RrW3b4b=ZDleRrfJx-WEtGK<*pZcz>omA8%eAbN{V0L7!-FxB+E$v zw1W?)iI~U1wKuh0=2R2#GV|ssZu*_!{-_B;dy87N1+>fd?2LHil8+fE3S8C za|6QtH^>Gm4k$)wmS~Ejj2khMaSkKH4rSy{DE3RGa5DZr<9%D2L4!o>CTtQ9vUdvpffY6U7lTsF?bp0#UZnA>|OT&iB7g~!+c@7 zTpXLsma(BTB{hElbt8LBnZhCjYd%*h-c)eQA_VOuD#x&Byj0eQk%gs+RniK0v|TrY zi&!a+0jsI)1{`}&=XX)^&3NT{`08*kH#xHjjp~@;sXWal}aJDei&1E;NK=s5}^lvoMtJQI9JYtR&MH@QO~I zro6sIU~PNAWv$7D{vJ%cwPiYdf&S1pjY!-{%fcUxkUGno+_Y34RYGokz)9NVov1~c z7K3$(WIpW+nYh&UC3fHaY2bbaZrz zh0RjkVmTC+lTIV790Q{j4p46cd6+n9-sP2o2`dhhO2?oz@oW^GI3rF3(Bea{XW?=5 zFz%!0>;WunTmaJl36)iYckH-qewx3SnApP2)h+W^h%P^c{6;_2#uxz>R}vVNOP#5I zNE~be8=~-CY^WL89zv}E5a~bWE8Z9{?fl=s7+e_Bi_Z@8V4cYD_dfqvJSXix;gLqH zL1}-Q18l+JStuIO13o(Mh(kCBP0C(?;kK#m%~0KvZGXCrPl?F+LFqZ)^cn$n%XLOJ z04>=wV_M0@tsKD+Y4RAV6iP@s;&mD}(RC04TN{{b=XRb_(`f97PowO#-x0G3 z9UjOWpIq=5nwXq{)5h{BkGArD) zJ}4!I&9P0!WD4`I&>%vCuqf}n5Js%encg!a&a(?Dhy1}#%v_8qB%t66O%yghA{p4q ziyHY%&@jNL8DFp!mjmfe&Ww*ua@c00G(g0`fvCgtaD3+$J^GBCS7o<)3Q~*3XBpZ{ zTl|ynue_als^T}`J2_Fj5lq>2=#eFpcFJVT!O9=0SQi?L2_|S75n%eHtLiy6* z41jnFu?C(&K*8Q21R3<#dL7U^bcZ9RDbVIkz zhE5NqARebX8~{ysu8e+X0qo?bub<{GGFT1j3rBILXV9|bas%FXNsZ~(pJ|0T)%NQY z>S0e*Sgi132Y^u02dMwwG54f48#)BW9b9=}?E5TgK!+f|{z=L4J!v#{sW`S)WGrNB zb3g#yk}-jU1=qCvXoxFVh=O=x#v2JRsmbEFqL>AnIbu1Y`tL!C;9w<()Fl`DLIlTv z*%8hGmnQ=32MXmdeyBD$Ha&s9Wx}l?kg(1pVm>EBdmMmZ#d&>E*hA;RZA2p?a6d$fVaqlrw)|GK$Dr35u3M{< zc8dY>%pjz}?9Df^2O;gc1RJcBIh6Og3^LK+zibOU?z@Z zRcRdG8^m!vXp)Dwn%dq<8D51k(0b{DeGg2TV0o%Cig4yv@vGvFPUa}0T^Jc~;CHnP zCxf+QAP$n@#xdQe^usLbrf$egL>o~NKb%h-LqgLqYTSnyurwx#{%gB z77hAc!kCMKGI{4(rFH-mi1S@%I&`@6>jUi>uqObx+azSguwshvGbO1|J|+im;G$j z6AwJn_bq$^Lg1hJZ&P2p`psvIyFa@6dyjr?`eq!kM8U0f$uHJ#`{Ip%_4oB#&%E!9 z%b)tcP?x|j+VtEbx1D?Y2af$@`g0FNojH7(Lg1-QpS|tVZBO6%@Lyi{gGaNg-mldC z0*@uf&v<(H*u^Vn&-&3VTVMRVQvV_FcV9O6_~-hbXuaaT!9?@dT8432rk>^g;BB|Q z#ronICvX1fhWl<${ugLEBk(W3arxfm_uT!nk#~RcwvT=CYoI?O@b^90v-+hs{QFlv z^8U{he|vlBFO@nf@OLy^{_=*8-*xzzYd=(+d~w4jrG6#w#>>C{+ZPgjb07Wfu5)_# zb)&wU@g0iRx+h9o9{qCf$xrv5b<4pwo%g28@Tm`hukZTKfooe=HICfyp8UGQiL6o| z5_sdTQe^f2{@tbF2jBbp>4%|y^&^4*Z0$#`e(Kxmf{AGP&abN5A4a*reTd)4nAkCj z)4}q)^Xv8R&h;k4hqq5OSKvH3j#B>-x#cwaiR7Oe z)#shPOf|kyVSbPPYBe}NHL6cYpO_&2;q4R1r5j5h*gt`ckWrr|Kaosc1M~d&3FOi; z>NEK#kkONobvxlq)8!M%!fMHHB2FZe7*6$X1WqKol&OD3p?~pk0@<}r(S-7=f)mII zrJCO>Als%~M`%-F_iX5LJc_d+zW0PK3SB1vzzOhPO5RH!u$PDazcYq5b)iHs?cClQ z+9Iq0>K0H}M@I$Jqd`3y^v9Rjg_0MS*yXc_5W2*!zCT@wy*{r>9k+E=gwQ2!^EClC z{XA}dvT3=Bw>@>bQa?rjlfrw8dPb+3)t!jEP7>HVbgEf>5~(!;dr+sE)l*0z6hPj8 z)~ROod!)b!u)1|#s#%?n6vLbrb)imS{}L&X0+!RMW_1Hn_z&2;PBp8yBXx?v-lbE` z>H(xq71-bDRI~aaQl|;*X`O0T4am4&U@LSAvLJs6VzJb))0{fOuHLDkp+90ss=v1>h1(gU1>~x)K z#yJh8u283(^1*kMZob?8R`k>BhrfN*CvG{4u;NvItmK8~>y}>mBhS6*xuf8b9olvK zXZv4%`Q=AC@b>VNxPJBVN03xM<)0(R_J!1wYCrznBkxUDAA!6;gj>@`R!i#YRT<)s z*iGq|1$XH&$?IPCx;H(36eO2E=ka>x+ApxmA>8G*W<5^d!1r%>!qlkU*je>|2l}oQQXAwN+W^aWyw3ueI9q08lY90i+R{Y6S)7H zb|Y7vl|3*v>;2fUgr;8GdK7TpyjFP+{=IW8Lfw`&b|lX0C&tlVwzv6T*ZOPJuwJED z;0w6>aQhd_H)l{2;WYOtna3 zG1aUd#$Tpd)IaD{vy#?ts?)9i;(wy`*%Z3rpx65suj{jW&D_*NaZzj4HFJ#2sL z$T4HCw;pXugHhs1-)iftO;i_WH6A%8wLUV~_zILBI?;M~uvI5l9UfeT0@r-PUgfh{ zmpSs)G`)iEJ;T?a4;)Fn)csYd$D1Cf&I7#xZ*n~e1^TVOyI7vWZ~M5Y&CbGRUXJ;# z-)-8FVq2|KTk&_hq;ADuuLIqI6lYA!)nDPS*G1lAupdWi5cfLujDfN9czOR5DR#i+ zY8mA6^0px5VNWrs4JNf2smmnCB}jQWdJOhTlggNsi4 zwzP31C1hWrxOZO}gI-G;?SxAT0UJ3~UVEuKwy(s8WB z^D#W}O~Hk);Ms!bQ+T4L3*W&LgU7-T@I+*>uomU5!Lu7r)O+CyJW=+7gXda2NAN^+ zus|(cf!lL`OnL5)sb=*d{H3k5sE_GXv-&hrw4@eAnV4!;kK-?`utoi&PBp7DP=d$r zY@KRW7aCZ*f$cCb%IKAQm4PJoE`o zhuv=g*1o7OGSAt#Z^Hff>G&g8UA9n;;9G`sGUSryQQYJk=zkb;SLq?Q49r1!^Lx=D zd1DU>;hvMXb^2|uypbDmyXEaH{Wb>cYiWBCEi(_uxX5rSAkP89Qf7+>3zIIEH3|o% z=ez(|8n=J3J_m90o*>@MXl2*8Pc!)Lak;&H?6u(0}YE3W>dUlz*S!{JM3o%iVDBAC^7;%eYXiWVtr|H8K!CoH-ifK1*M5=&R=sDXH;DfLfFAU|IM zX<#?emzO+SLslrC^MHn|G?42wWSN1yQA3o0RK5`I^LcOy&DS-g#pL?Q5*ltBc$d$o z-dB+1;>Snuv6cYMrg(B2U;m=cv&RMn2*Vn6XArWLkoOo!d*CbB>~*j)61 zlzjbKeZ z*7)X)>n{1sjq4uw%QisQ`k0OD*7|-8E3o8~HQ=!HD>bfL>%%mzyYyQ$u3O{tGswR5 zi!&&w#z$sccjN^YClRJPFr~#DskQZ{=q?r zait$g3vzJK#zk;&U29Q3p!;2X@!R_jd$v3_e*MtcTnPg8AOG9z#Fq-=^K>`f`un?4+r?A%{(fr_C*vZ# R@_dd0W{-D+VvE4){{a(RiEID> literal 0 HcmV?d00001 diff --git a/Debug/vc141.idb b/Debug/vc141.idb new file mode 100644 index 0000000000000000000000000000000000000000..010c945659af9aaa9284dd52a73b76fc23215f4e GIT binary patch literal 830464 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 O1)>y)Qs94y0{;)=us+%V literal 0 HcmV?d00001 diff --git a/Glm/CMakeLists.txt b/Glm/CMakeLists.txt new file mode 100644 index 0000000..d3165df --- /dev/null +++ b/Glm/CMakeLists.txt @@ -0,0 +1,43 @@ +set(NAME glm) + +file(GLOB ROOT_SOURCE *.cpp) +file(GLOB ROOT_INLINE *.inl) +file(GLOB ROOT_HEADER *.hpp) + +file(GLOB_RECURSE CORE_SOURCE ./core/*.cpp) +file(GLOB_RECURSE CORE_INLINE ./core/*.inl) +file(GLOB_RECURSE CORE_HEADER ./core/*.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 VIRTREV_SOURCE ./virtrev/*.cpp) +file(GLOB_RECURSE VIRTREV_INLINE ./virtrev/*.inl) +file(GLOB_RECURSE VIRTREV_HEADER ./virtrev/*.hpp) + +source_group("Core Files" FILES ${CORE_SOURCE}) +source_group("Core Files" FILES ${CORE_INLINE}) +source_group("Core Files" FILES ${CORE_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("VIRTREV Files" FILES ${VIRTREV_SOURCE}) +source_group("VIRTREV Files" FILES ${VIRTREV_INLINE}) +source_group("VIRTREV Files" FILES ${VIRTREV_HEADER}) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) + +add_executable(${NAME} + ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} + ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER} + ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER} + ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER} + ${VIRTREV_SOURCE} ${VIRTREV_INLINE} ${VIRTREV_HEADER}) diff --git a/Glm/core/_detail.hpp b/Glm/core/_detail.hpp new file mode 100644 index 0000000..607c32b --- /dev/null +++ b/Glm/core/_detail.hpp @@ -0,0 +1,482 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_detail.hpp +/// @date 2008-07-24 / 2011-06-14 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_detail +#define glm_core_detail + +#include "setup.hpp" +#include +#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) +#include +#endif + +namespace glm{ +namespace detail +{ + class half; + +#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available + typedef int64_t sint64; + typedef uint64_t uint64; +#elif(GLM_COMPILER & GLM_COMPILER_VC) + typedef signed __int64 sint64; + typedef unsigned __int64 uint64; +#elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG)) + __extension__ typedef signed long long sint64; + __extension__ typedef unsigned long long uint64; +#elif(GLM_COMPILER & GLM_COMPILER_BC) + typedef Int64 sint64; + typedef Uint64 uint64; +#else//unknown compiler + typedef signed long long sint64; + typedef unsigned long long uint64; +#endif//GLM_COMPILER + + template + struct If + { + template + static GLM_FUNC_QUALIFIER T apply(F functor, const T& val) + { + return functor(val); + } + }; + + template<> + struct If + { + template + static GLM_FUNC_QUALIFIER T apply(F, const T& val) + { + return val; + } + }; + + //template + //struct traits + //{ + // static const bool is_signed = false; + // static const bool is_float = false; + // static const bool is_vector = false; + // static const bool is_matrix = false; + // static const bool is_genType = false; + // static const bool is_genIType = false; + // static const bool is_genUType = false; + //}; + + //template <> + //struct traits + //{ + // static const bool is_float = true; + // static const bool is_genType = true; + //}; + + //template <> + //struct traits + //{ + // static const bool is_float = true; + // static const bool is_genType = true; + //}; + + //template <> + //struct traits + //{ + // static const bool is_float = true; + // static const bool is_genType = true; + //}; + + //template + //struct desc + //{ + // typedef genType type; + // typedef genType * pointer; + // typedef genType const* const_pointer; + // typedef genType const *const const_pointer_const; + // typedef genType *const pointer_const; + // typedef genType & reference; + // typedef genType const& const_reference; + // typedef genType const& param_type; + + // typedef typename genType::value_type value_type; + // typedef typename genType::size_type size_type; + // static const typename size_type value_size; + //}; + + //template + //const typename desc::size_type desc::value_size = genType::value_size(); + + union uif32 + { + GLM_FUNC_QUALIFIER uif32() : + i(0) + {} + + GLM_FUNC_QUALIFIER uif32(float f) : + f(f) + {} + + GLM_FUNC_QUALIFIER uif32(unsigned int i) : + i(i) + {} + + float f; + unsigned int i; + }; + + union uif64 + { + GLM_FUNC_QUALIFIER uif64() : + i(0) + {} + + GLM_FUNC_QUALIFIER uif64(double f) : + f(f) + {} + + GLM_FUNC_QUALIFIER uif64(uint64 i) : + i(i) + {} + + double f; + uint64 i; + }; + + typedef uif32 uif; + + ////////////////// + // int + + template + struct is_int + { + enum is_int_enum + { + _YES = 0, + _NO = 1 + }; + }; + +#define GLM_DETAIL_IS_INT(T) \ + template <> \ + struct is_int \ + { \ + enum is_int_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + ////////////////// + // uint + + template + struct is_uint + { + enum is_uint_enum + { + _YES = 0, + _NO = 1 + }; + }; + +#define GLM_DETAIL_IS_UINT(T) \ + template <> \ + struct is_uint \ + { \ + enum is_uint_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + //GLM_DETAIL_IS_UINT(unsigned long long) + + ////////////////// + // float + + template + struct is_float + { + enum is_float_enum + { + _YES = 0, + _NO = 1 + }; + }; + +#define GLM_DETAIL_IS_FLOAT(T) \ + template <> \ + struct is_float \ + { \ + enum is_float_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + GLM_DETAIL_IS_FLOAT(detail::half); + GLM_DETAIL_IS_FLOAT(float); + GLM_DETAIL_IS_FLOAT(double); + GLM_DETAIL_IS_FLOAT(long double); + + ////////////////// + // bool + + template + struct is_bool + { + enum is_bool_enum + { + _YES = 0, + _NO = 1 + }; + }; + + template <> + struct is_bool + { + enum is_bool_enum + { + _YES = 1, + _NO = 0 + }; + }; + + ////////////////// + // vector + + template + struct is_vector + { + enum is_vector_enum + { + _YES = 0, + _NO = 1 + }; + }; + +# define GLM_DETAIL_IS_VECTOR(TYPE) \ + template \ + struct is_vector > \ + { \ + enum is_vector_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + ////////////////// + // matrix + + template + struct is_matrix + { + enum is_matrix_enum + { + _YES = 0, + _NO = 1 + }; + }; + +#define GLM_DETAIL_IS_MATRIX(T) \ + template <> \ + struct is_matrix \ + { \ + enum is_matrix_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + ////////////////// + // type + + template + struct type + { + enum type_enum + { + is_float = is_float::_YES, + is_int = is_int::_YES, + is_uint = is_uint::_YES, + is_bool = is_bool::_YES + }; + }; + + ////////////////// + // type + + typedef signed char int8; + typedef signed short int16; + typedef signed int int32; + typedef detail::sint64 int64; + + typedef unsigned char uint8; + typedef unsigned short uint16; + typedef unsigned int uint32; + typedef detail::uint64 uint64; + + typedef detail::half float16; + typedef float float32; + typedef double float64; + + ////////////////// + // float_or_int_trait + + struct float_or_int_value + { + enum + { + GLM_ERROR, + GLM_FLOAT, + GLM_INT + }; + }; + + template + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_ERROR}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_FLOAT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_FLOAT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_FLOAT}; + }; + +}//namespace detail +}//namespace glm + +#if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005)) +# define GLM_DEPRECATED __declspec(deprecated) +# define GLM_ALIGN(x) __declspec(align(x)) +# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct +# define GLM_RESTRICT __declspec(restrict) +# define GLM_RESTRICT_VAR __restrict +# define GLM_CONSTEXPR +#elif(GLM_COMPILER & GLM_COMPILER_INTEL) +# define GLM_DEPRECATED +# define GLM_ALIGN(x) __declspec(align(x)) +# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct +# define GLM_RESTRICT +# define GLM_RESTRICT_VAR __restrict +# define GLM_CONSTEXPR +#elif(((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31)) || (GLM_COMPILER & GLM_COMPILER_CLANG)) +# define GLM_DEPRECATED __attribute__((__deprecated__)) +# define GLM_ALIGN(x) __attribute__((aligned(x))) +# define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) +# if(GLM_COMPILER >= GLM_COMPILER_GCC33) +# define GLM_RESTRICT __restrict__ +# define GLM_RESTRICT_VAR __restrict__ +# else +# define GLM_RESTRICT +# define GLM_RESTRICT_VAR +# endif +# define GLM_RESTRICT __restrict__ +# define GLM_RESTRICT_VAR __restrict__ +# if((GLM_COMPILER >= GLM_COMPILER_GCC47) && ((GLM_LANG & GLM_LANG_CXX0X) == GLM_LANG_CXX0X)) +# define GLM_CONSTEXPR constexpr +# else +# define GLM_CONSTEXPR +# endif +#else +# define GLM_DEPRECATED +# define GLM_ALIGN +# define GLM_ALIGNED_STRUCT(x) +# define GLM_RESTRICT +# define GLM_RESTRICT_VAR +# define GLM_CONSTEXPR +#endif//GLM_COMPILER + +#endif//glm_core_detail diff --git a/Glm/core/_fixes.hpp b/Glm/core/_fixes.hpp new file mode 100644 index 0000000..21f33c0 --- /dev/null +++ b/Glm/core/_fixes.hpp @@ -0,0 +1,55 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_fixes.hpp +/// @date 2011-02-21 / 2011-11-22 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#include + +//! 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 + diff --git a/Glm/core/_swizzle.hpp b/Glm/core/_swizzle.hpp new file mode 100644 index 0000000..2c2ae9e --- /dev/null +++ b/Glm/core/_swizzle.hpp @@ -0,0 +1,861 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_swizzle.hpp +/// @date 2006-04-20 / 2011-02-16 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_swizzle +#define glm_core_swizzle + +#include "_swizzle_func.hpp" + +namespace glm +{ + enum comp + { + X = 0, + R = 0, + S = 0, + Y = 1, + G = 1, + T = 1, + Z = 2, + B = 2, + P = 2, + W = 3, + A = 3, + Q = 3 + }; +}//namespace glm + +namespace glm{ +namespace detail +{ + // Internal class for implementing swizzle operators + template + struct _swizzle_base0 + { + typedef T value_type; + + protected: + GLM_FUNC_QUALIFIER value_type& elem (size_t i) { return (reinterpret_cast(_buffer))[i]; } + GLM_FUNC_QUALIFIER const value_type& elem (size_t i) const { return (reinterpret_cast(_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 + struct _swizzle_base1 : public _swizzle_base0 + { + }; + + template + struct _swizzle_base1 : public _swizzle_base0 + { + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1)); } + }; + + template + struct _swizzle_base1 : public _swizzle_base0 + { + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); } + }; + + template + struct _swizzle_base1 : public _swizzle_base0 + { + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } + }; + + // Internal class for implementing swizzle operators + /* + Template parameters: + + ValueType = type of scalar values (e.g. float, double) + VecType = class the swizzle is applies to (e.g. tvec3) + 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 + struct _swizzle_base2 : public _swizzle_base1 + { + typedef VecType vec_type; + typedef ValueType value_type; + + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const ValueType& t) + { + for (int i = 0; i < N; ++i) + (*this)[i] = t; + return *this; + } + + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e = t; } + }; + _apply_op(that, op()); + return *this; + } + + GLM_FUNC_QUALIFIER void operator -= (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e -= t; } + }; + _apply_op(that, op()); + } + + GLM_FUNC_QUALIFIER void operator += (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e += t; } + }; + _apply_op(that, op()); + } + + GLM_FUNC_QUALIFIER void operator *= (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e *= t; } + }; + _apply_op(that, op()); + } + + GLM_FUNC_QUALIFIER void operator /= (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e /= t; } + }; + _apply_op(that, op()); + } + + GLM_FUNC_QUALIFIER value_type& operator[] (size_t i) + { +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; + return this->elem(offset_dst[i]); + } + GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const + { +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; + return this->elem(offset_dst[i]); + } + protected: + template + GLM_FUNC_QUALIFIER void _apply_op(const VecType& that, T 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. + ValueType 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 + struct _swizzle_base2 : public _swizzle_base1 + { + typedef VecType vec_type; + typedef ValueType value_type; + + struct Stub {}; + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; } + + GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const + { +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; + return this->elem(offset_dst[i]); + } + }; + + template + struct swizzle : public _swizzle_base2 + { + typedef _swizzle_base2 base_type; + + using base_type::operator=; + + GLM_FUNC_QUALIFIER operator VecType () const { return (*this)(); } + }; + +// +// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros +// +#define _GLM_SWIZZLE_TEMPLATE1 template +#define _GLM_SWIZZLE_TEMPLATE2 template +#define _GLM_SWIZZLE_TYPE1 glm::detail::swizzle +#define _GLM_SWIZZLE_TYPE2 glm::detail::swizzle + +// +// 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 V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ + { \ + return a() OPERAND b(); \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \ + { \ + return a() OPERAND b; \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const V& 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 V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \ + { \ + return a() OPERAND b; \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER V 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,P,E0,E1) \ + struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; + +#define _GLM_SWIZZLE2_3_MEMBERS(T,P2,E0,E1) \ + struct { glm::detail::swizzle<3,T,P2,0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P2,0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P2,0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P2,0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P2,1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P2,1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P2,1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P2,1,1,1,-1> E1 ## E1 ## E1; }; + +#define _GLM_SWIZZLE2_4_MEMBERS(T,P2,E0,E1) \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; + +#define _GLM_SWIZZLE3_2_MEMBERS(T,P2,E0,E1,E2) \ + struct { glm::detail::swizzle<2,T,P2,0,0,-1,-2> E0 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P2,0,1,-1,-2> E0 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P2,0,2,-1,-2> E0 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P2,1,0,-1,-2> E1 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P2,1,1,-1,-2> E1 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P2,1,2,-1,-2> E1 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P2,2,0,-1,-2> E2 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P2,2,1,-1,-2> E2 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P2,2,2,-1,-2> E2 ## E2; }; + +#define _GLM_SWIZZLE3_3_MEMBERS(T,P,E0,E1,E2) \ + struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; + +#define _GLM_SWIZZLE3_4_MEMBERS(T,P2,E0,E1,E2) \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,2,2> E2 ## E2 ## E2 ## E2; }; + +#define _GLM_SWIZZLE4_2_MEMBERS(T,P,E0,E1,E2,E3) \ + struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,0,2,-1,-2> E0 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P,0,3,-1,-2> E0 ## E3; }; \ + struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,1,2,-1,-2> E1 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P,1,3,-1,-2> E1 ## E3; }; \ + struct { glm::detail::swizzle<2,T,P,2,0,-1,-2> E2 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,2,1,-1,-2> E2 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,2,2,-1,-2> E2 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P,2,3,-1,-2> E2 ## E3; }; \ + struct { glm::detail::swizzle<2,T,P,3,0,-1,-2> E3 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,3,1,-1,-2> E3 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,3,2,-1,-2> E3 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P,3,3,-1,-2> E3 ## E3; }; + +#define _GLM_SWIZZLE4_3_MEMBERS(T,P,E0,E1,E2,E3) \ + struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,3,-1> E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,3,-1> E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,3,-1> E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,0,3,0,-1> E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,3,1,-1> E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,3,2,-1> E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,3,3,-1> E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,3,-1> E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,3,-1> E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,3,-1> E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,1,3,0,-1> E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,3,1,-1> E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,3,2,-1> E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,3,3,-1> E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,3,-1> E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,3,-1> E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,3,-1> E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,2,3,0,-1> E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,3,1,-1> E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,3,2,-1> E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,3,3,-1> E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,3,0,0,-1> E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,3,0,1,-1> E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,3,0,2,-1> E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,3,0,3,-1> E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,3,1,0,-1> E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,3,1,1,-1> E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,3,1,2,-1> E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,3,1,3,-1> E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,3,2,0,-1> E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,3,2,1,-1> E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,3,2,2,-1> E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,3,2,3,-1> E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,3,3,0,-1> E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,3,3,1,-1> E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,3,3,2,-1> E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,3,3,3,-1> E3 ## E3 ## E3; }; + +#define _GLM_SWIZZLE4_4_MEMBERS(T,P,E0,E1,E2,E3) \ + struct { glm::detail::swizzle<4,T,P,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,3,3> E3 ## E3 ## E3 ## E3; }; + +#endif//glm_core_swizzle diff --git a/Glm/core/_swizzle_func.hpp b/Glm/core/_swizzle_func.hpp new file mode 100644 index 0000000..e893dce --- /dev/null +++ b/Glm/core/_swizzle_func.hpp @@ -0,0 +1,787 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_swizzle_func.hpp +/// @date 2011-10-16 / 2011-10-16 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_swizzle_func +#define glm_core_swizzle_func + +#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ + SWIZZLED_TYPE A ## B() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B); \ + } + +#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ + SWIZZLED_TYPE A ## B ## C() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B, this->C); \ + } + +#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ + SWIZZLED_TYPE A ## B ## C ## D() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B, this->C, this->D); \ + } + +#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ + template \ + SWIZZLED_TYPE CLASS_TYPE::A ## B() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B); \ + } + +#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ + template \ + SWIZZLED_TYPE CLASS_TYPE::A ## B ## C() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B, this->C); \ + } + +#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ + template \ + SWIZZLED_TYPE CLASS_TYPE::A ## B ## C ## D() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B, this->C, this->D); \ + } + +#define GLM_MUTABLE + +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t) + +//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2) + +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) + +#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, q) + +//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3) + +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C) + +#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B) + +#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p) + +//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t) + +//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q) + +//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p) + +//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4) + +#endif//glm_core_swizzle_func diff --git a/Glm/core/_vectorize.hpp b/Glm/core/_vectorize.hpp new file mode 100644 index 0000000..0735003 --- /dev/null +++ b/Glm/core/_vectorize.hpp @@ -0,0 +1,159 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_vectorize.hpp +/// @date 2011-10-14 / 2011-10-14 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#define VECTORIZE2_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec2 func( \ + detail::tvec2 const & v) \ + { \ + return detail::tvec2( \ + func(v.x), \ + func(v.y)); \ + } + +#define VECTORIZE3_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec3 func( \ + detail::tvec3 const & v) \ + { \ + return detail::tvec3( \ + func(v.x), \ + func(v.y), \ + func(v.z)); \ + } + +#define VECTORIZE4_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec4 func( \ + detail::tvec4 const & v) \ + { \ + return detail::tvec4( \ + func(v.x), \ + func(v.y), \ + func(v.z), \ + func(v.w)); \ + } + +#define VECTORIZE_VEC(func) \ + VECTORIZE2_VEC(func) \ + VECTORIZE3_VEC(func) \ + VECTORIZE4_VEC(func) + +#define VECTORIZE2_VEC_SCA(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec2 func \ + ( \ + detail::tvec2 const & x, \ + typename detail::tvec2::value_type const & y \ + ) \ + { \ + return detail::tvec2( \ + func(x.x, y), \ + func(x.y, y)); \ + } + +#define VECTORIZE3_VEC_SCA(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec3 func \ + ( \ + detail::tvec3 const & x, \ + typename detail::tvec3::value_type const & y \ + ) \ + { \ + return detail::tvec3( \ + func(x.x, y), \ + func(x.y, y), \ + func(x.z, y)); \ + } + +#define VECTORIZE4_VEC_SCA(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec4 func \ + ( \ + detail::tvec4 const & x, \ + typename detail::tvec4::value_type const & y \ + ) \ + { \ + return detail::tvec4( \ + func(x.x, y), \ + func(x.y, y), \ + func(x.z, y), \ + func(x.w, y)); \ + } + +#define VECTORIZE_VEC_SCA(func) \ + VECTORIZE2_VEC_SCA(func) \ + VECTORIZE3_VEC_SCA(func) \ + VECTORIZE4_VEC_SCA(func) + +#define VECTORIZE2_VEC_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec2 func \ + ( \ + detail::tvec2 const & x, \ + detail::tvec2 const & y \ + ) \ + { \ + return detail::tvec2( \ + func(x.x, y.x), \ + func(x.y, y.y)); \ + } + +#define VECTORIZE3_VEC_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec3 func \ + ( \ + detail::tvec3 const & x, \ + detail::tvec3 const & y \ + ) \ + { \ + return detail::tvec3( \ + func(x.x, y.x), \ + func(x.y, y.y), \ + func(x.z, y.z)); \ + } + +#define VECTORIZE4_VEC_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec4 func \ + ( \ + detail::tvec4 const & x, \ + detail::tvec4 const & y \ + ) \ + { \ + return detail::tvec4( \ + func(x.x, y.x), \ + func(x.y, y.y), \ + func(x.z, y.z), \ + func(x.w, y.w)); \ + } + +#define VECTORIZE_VEC_VEC(func) \ + VECTORIZE2_VEC_VEC(func) \ + VECTORIZE3_VEC_VEC(func) \ + VECTORIZE4_VEC_VEC(func) diff --git a/Glm/core/dummy.cpp b/Glm/core/dummy.cpp new file mode 100644 index 0000000..b19eb36 --- /dev/null +++ b/Glm/core/dummy.cpp @@ -0,0 +1,35 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/dummy.cpp +/// @date 2011-01-19 / 2011-06-15 +/// @author Christophe Riccio +/// +/// GLM is a header only library. There is nothing to compile. +/// dummy.cpp exist only a wordaround for CMake file. +/////////////////////////////////////////////////////////////////////////////////// + +#define GLM_MESSAGES +#include "../glm.hpp" + +//#error "GLM is a header only library" diff --git a/Glm/core/func_common.hpp b/Glm/core/func_common.hpp new file mode 100644 index 0000000..528286c --- /dev/null +++ b/Glm/core/func_common.hpp @@ -0,0 +1,430 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_common.hpp +/// @date 2008-03-08 / 2010-01-26 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.3 Common Functions +/// +/// @defgroup core_func_common Common functions +/// @ingroup core +/// +/// These all operate component-wise. The description is per component. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_common +#define GLM_CORE_func_common GLM_VERSION + +#include "_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 GLSL abs man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType abs(genType const & x); + + /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. + /// + /// @tparam genType Floating-point or signed integer; scalar or vector types. + /// + /// @see GLSL sign man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType sign(genType const & x); + + /// Returns a value equal to the nearest integer that is less then or equal to x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL floor man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType floor(genType 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 genType Floating-point scalar or vector types. + /// + /// @see GLSL trunc man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType trunc(genType 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 genType Floating-point scalar or vector types. + /// + /// @see GLSL round man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType round(genType 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 genType Floating-point scalar or vector types. + /// + /// @see GLSL roundEven man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + /// @see New round to even technique + template + GLM_FUNC_DECL genType roundEven(genType const & x); + + /// Returns a value equal to the nearest integer + /// that is greater than or equal to x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL ceil man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType ceil(genType const & x); + + /// Return x - floor(x). + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL fract man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType fract(genType const & x); + + /// Modulus. Returns x - y * floor(x / y) + /// for each component in x using the floating point value y. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL mod man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType mod( + genType const & x, + genType const & y); + + /// Modulus. Returns x - y * floor(x / y) + /// for each component in x using the floating point value y. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL mod man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType mod( + genType const & x, + typename genType::value_type 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 GLSL modf man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType modf( + genType const & x, + genType & i); + + /// Returns y if y < x; otherwise, it returns x. + /// + /// @tparam genType Floating-point or integer; scalar or vector types. + /// + /// @see GLSL min man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType min( + genType const & x, + genType const & y); + + template + GLM_FUNC_DECL genType min( + genType const & x, + typename genType::value_type const & y); + + /// Returns y if x < y; otherwise, it returns x. + /// + /// @tparam genType Floating-point or integer; scalar or vector types. + /// + /// @see GLSL max man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType max( + genType const & x, + genType const & y); + + template + GLM_FUNC_DECL genType max( + genType const & x, + typename genType::value_type 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 GLSL clamp man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType clamp( + genType const & x, + genType const & minVal, + genType const & maxVal); + + template + GLM_FUNC_DECL genType clamp( + genType const & x, + typename genType::value_type const & minVal, + typename genType::value_type 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 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 GLSL mix man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + /// + /// @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 + /// ... + /// 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); // Teturns 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 + GLM_FUNC_DECL genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a); + + //! Returns 0.0 if x < edge, otherwise it returns 1.0. + //! + /// @see GLSL step man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType step( + genType const & edge, + genType const & x); + + template + GLM_FUNC_DECL genType step( + typename genType::value_type const & edge, + genType 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 GLSL smoothstep man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType smoothstep( + genType const & edge0, + genType const & edge1, + genType const & x); + + template + GLM_FUNC_DECL genType smoothstep( + typename genType::value_type const & edge0, + typename genType::value_type const & edge1, + genType 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 genType Floating-point scalar or vector types. + /// + /// @see GLSL isnan man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL typename genType::bool_type isnan(genType 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 genType Floating-point scalar or vector types. + /// + /// @see GLSL isinf man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL typename genType::bool_type isinf(genType const & x); + + /// Returns a signed integer value representing + /// the encoding of a floating-point value. The floatingpoint + /// value's bit-level representation is preserved. + /// + /// @tparam genType Single-precision floating-point scalar or vector types. + /// @tparam genIType Signed integer scalar or vector types. + /// + /// @see GLSL floatBitsToInt man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genIType floatBitsToInt(genType const & value); + + /// Returns a unsigned integer value representing + /// the encoding of a floating-point value. The floatingpoint + /// value's bit-level representation is preserved. + /// + /// @tparam genType Single-precision floating-point scalar or vector types. + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL floatBitsToUint man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genUType floatBitsToUint(genType const & value); + + /// 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 genType Single-precision floating-point scalar or vector types. + /// @tparam genIType Signed integer scalar or vector types. + /// + /// @see GLSL intBitsToFloat man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + /// + /// @todo Clarify this declaration, we don't need to actually specify the return type + template + GLM_FUNC_DECL genType intBitsToFloat(genIType const & value); + + /// 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 genType Single-precision floating-point scalar or vector types. + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL uintBitsToFloat man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + /// + /// @todo Clarify this declaration, we don't need to actually specify the return type + template + GLM_FUNC_DECL genType uintBitsToFloat(genUType const & value); + + /// Computes and returns a * b + c. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL fma man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + 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 GLSL frexp man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType frexp(genType const & x, genIType & 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 GLSL ldexp man page; + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp); + + /// @} +}//namespace glm + +#include "func_common.inl" + +#endif//GLM_CORE_func_common diff --git a/Glm/core/func_common.inl b/Glm/core/func_common.inl new file mode 100644 index 0000000..21b8cb2 --- /dev/null +++ b/Glm/core/func_common.inl @@ -0,0 +1,1226 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_common.inl +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm{ +namespace detail +{ + template + struct Abs_ + {}; + + template + struct Abs_ + { + GLM_FUNC_QUALIFIER static genFIType get(genFIType const & x) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int, "'abs' only accept floating-point and integer inputs"); + return x >= genFIType(0) ? x : -x; + // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; + } + }; + + template + struct Abs_ + { + GLM_FUNC_QUALIFIER static genFIType get(genFIType const & x) + { + GLM_STATIC_ASSERT( + detail::type::is_uint, "'abs' only accept floating-point and integer inputs"); + return x; + } + }; +}//namespace detail + + // abs + template + GLM_FUNC_QUALIFIER genFIType abs + ( + genFIType const & x + ) + { + return detail::Abs_::is_signed>::get(x); + } + + VECTORIZE_VEC(abs) + + // sign + //Try something like based on x >> 31 to get the sign bit + template + GLM_FUNC_QUALIFIER genFIType sign + ( + genFIType const & x + ) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int, "'sign' only accept signed inputs"); + + genFIType result; + if(x > genFIType(0)) + result = genFIType(1); + else if(x < genFIType(0)) + result = genFIType(-1); + else + result = genFIType(0); + return result; + } + + VECTORIZE_VEC(sign) + + // floor + template <> + GLM_FUNC_QUALIFIER detail::half floor(detail::half const & x) + { + return detail::half(::std::floor(float(x))); + } + + template + GLM_FUNC_QUALIFIER genType floor(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'floor' only accept floating-point inputs"); + + return ::std::floor(x); + } + + VECTORIZE_VEC(floor) + + // trunc + template + GLM_FUNC_QUALIFIER genType trunc(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'trunc' only accept floating-point inputs"); + return x < 0 ? -floor(-x) : floor(x); + } + + VECTORIZE_VEC(trunc) + + // round + template + GLM_FUNC_QUALIFIER genType round(genType const& x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'round' only accept floating-point inputs"); + + if(x < 0) + return genType(int(x - genType(0.5))); + return genType(int(x + genType(0.5))); + } + + VECTORIZE_VEC(round) + +/* + // roundEven + template + GLM_FUNC_QUALIFIER genType roundEven(genType const& x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'roundEven' only accept floating-point inputs"); + + return genType(int(x + genType(int(x) % 2))); + } +*/ + + // roundEven + template + GLM_FUNC_QUALIFIER genType roundEven(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'roundEven' only accept floating-point inputs"); + + int Integer = int(x); + genType IntegerPart = genType(Integer); + genType FractionalPart = fract(x); + + if(FractionalPart > genType(0.5) || FractionalPart < genType(0.5)) + { + return round(x); + } + else if((Integer % 2) == 0) + { + return IntegerPart; + } + else if(x <= genType(0)) // Work around... + { + return IntegerPart - 1; + } + else + { + return IntegerPart + 1; + } + //else // Bug on MinGW 4.5.2 + //{ + // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); + //} + } + + VECTORIZE_VEC(roundEven) + + // ceil + template + GLM_FUNC_QUALIFIER genType ceil(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'ceil' only accept floating-point inputs"); + + return ::std::ceil(x); + } + + VECTORIZE_VEC(ceil) + + // fract + template + GLM_FUNC_QUALIFIER genType fract + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'fract' only accept floating-point inputs"); + + return x - ::std::floor(x); + } + + VECTORIZE_VEC(fract) + + // mod + template + GLM_FUNC_QUALIFIER genType mod + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mod' only accept floating-point inputs"); + + return x - y * floor(x / y); + } + + VECTORIZE_VEC_SCA(mod) + VECTORIZE_VEC_VEC(mod) + + // modf + template + GLM_FUNC_QUALIFIER genType modf + ( + genType const & x, + genType & i + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'modf' only accept floating-point inputs"); + + return std::modf(x, &i); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 modf + ( + detail::tvec2 const & x, + detail::tvec2 & i + ) + { + return detail::tvec2( + modf(x.x, i.x), + modf(x.y, i.y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 modf + ( + detail::tvec3 const & x, + detail::tvec3 & i + ) + { + return detail::tvec3( + modf(x.x, i.x), + modf(x.y, i.y), + modf(x.z, i.z)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 modf + ( + detail::tvec4 const & x, + detail::tvec4 & i + ) + { + return detail::tvec4( + 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 + GLM_FUNC_QUALIFIER genType min + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int || + detail::type::is_uint, "'min' only accept numbers"); + + return x < y ? x : y; + } + + VECTORIZE_VEC_SCA(min) + VECTORIZE_VEC_VEC(min) + + // max + template + GLM_FUNC_QUALIFIER genType max + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int || + detail::type::is_uint, "'max' only accept numbers"); + + return x > y ? x : y; + } + + VECTORIZE_VEC_SCA(max) + VECTORIZE_VEC_VEC(max) + + // clamp + template + GLM_FUNC_QUALIFIER valType clamp + ( + valType const & x, + valType const & minVal, + valType const & maxVal + ) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int || + detail::type::is_uint, "'clamp' only accept numbers"); + + return min(maxVal, max(minVal, x)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 clamp + ( + detail::tvec2 const & x, + typename detail::tvec2::value_type const & minVal, + typename detail::tvec2::value_type const & maxVal + ) + { + return detail::tvec2( + clamp(x.x, minVal, maxVal), + clamp(x.y, minVal, maxVal)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 clamp + ( + detail::tvec3 const & x, + typename detail::tvec3::value_type const & minVal, + typename detail::tvec3::value_type const & maxVal + ) + { + return detail::tvec3( + clamp(x.x, minVal, maxVal), + clamp(x.y, minVal, maxVal), + clamp(x.z, minVal, maxVal)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 clamp + ( + detail::tvec4 const & x, + typename detail::tvec4::value_type const & minVal, + typename detail::tvec4::value_type const & maxVal + ) + { + return detail::tvec4( + clamp(x.x, minVal, maxVal), + clamp(x.y, minVal, maxVal), + clamp(x.z, minVal, maxVal), + clamp(x.w, minVal, maxVal)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 clamp + ( + detail::tvec2 const & x, + detail::tvec2 const & minVal, + detail::tvec2 const & maxVal + ) + { + return detail::tvec2( + clamp(x.x, minVal.x, maxVal.x), + clamp(x.y, minVal.y, maxVal.y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 clamp + ( + detail::tvec3 const & x, + detail::tvec3 const & minVal, + detail::tvec3 const & maxVal + ) + { + return detail::tvec3( + clamp(x.x, minVal.x, maxVal.x), + clamp(x.y, minVal.y, maxVal.y), + clamp(x.z, minVal.z, maxVal.z)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 clamp + ( + detail::tvec4 const & x, + detail::tvec4 const & minVal, + detail::tvec4 const & maxVal + ) + { + return detail::tvec4( + clamp(x.x, minVal.x, maxVal.x), + clamp(x.y, minVal.y, maxVal.y), + clamp(x.z, minVal.z, maxVal.z), + clamp(x.w, minVal.w, maxVal.w)); + } + + // mix + template + GLM_FUNC_QUALIFIER genType mix + ( + genType const & x, + genType const & y, + genType const & a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); + + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + valType const & a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); + + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + valType const & a + ) + { + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + valType const & a + ) + { + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 const & a + ) + { + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 const & a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); + + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 const & a + ) + { + return x + a * (y - x); + } + + //template + //GLM_FUNC_QUALIFIER genTypeT mix + //( + // genTypeT const & x, + // genTypeT const & y, + // float const & a + //) + //{ + // // It could be a vector too + // //GLM_STATIC_ASSERT( + // // detail::type::is_float && + // // detail::type::is_float); + + // return x + a * (y - x); + //} + + template <> + GLM_FUNC_QUALIFIER float mix + ( + float const & x, + float const & y, + bool const & a + ) + { + return a ? y : x; + } + + template <> + GLM_FUNC_QUALIFIER double mix + ( + double const & x, + double const & y, + bool const & a + ) + { + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + typename detail::tvec2::bool_type a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + detail::tvec2 result; + for + ( + typename detail::tvec2::size_type i = 0; + i < x.length(); ++i + ) + { + result[i] = a[i] ? y[i] : x[i]; + } + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + typename detail::tvec3::bool_type a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + detail::tvec3 result; + for + ( + typename detail::tvec3::size_type i = 0; + i < x.length(); ++i + ) + { + result[i] = a[i] ? y[i] : x[i]; + } + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + typename detail::tvec4::bool_type a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + detail::tvec4 result; + for + ( + typename detail::tvec4::size_type i = 0; + i < x.length(); ++i + ) + { + result[i] = a[i] ? y[i] : x[i]; + } + return result; + } + + // step + template + GLM_FUNC_QUALIFIER genType step + ( + genType const & edge, + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'step' only accept floating-point inputs"); + + return x < edge ? genType(0) : genType(1); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 step + ( + typename detail::tvec2::value_type const & edge, + detail::tvec2 const & x + ) + { + return detail::tvec2( + x.x < edge ? T(0) : T(1), + x.y < edge ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 step + ( + typename detail::tvec3::value_type const & edge, + detail::tvec3 const & x + ) + { + return detail::tvec3( + x.x < edge ? T(0) : T(1), + x.y < edge ? T(0) : T(1), + x.z < edge ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 step + ( + typename detail::tvec4::value_type const & edge, + detail::tvec4 const & x + ) + { + return detail::tvec4( + x.x < edge ? T(0) : T(1), + x.y < edge ? T(0) : T(1), + x.z < edge ? T(0) : T(1), + x.w < edge ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 step + ( + detail::tvec2 const & edge, + detail::tvec2 const & x + ) + { + return detail::tvec2( + x.x < edge.x ? T(0) : T(1), + x.y < edge.y ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 step + ( + detail::tvec3 const & edge, + detail::tvec3 const & x + ) + { + return detail::tvec3( + x.x < edge.x ? T(0) : T(1), + x.y < edge.y ? T(0) : T(1), + x.z < edge.z ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 step + ( + detail::tvec4 const & edge, + detail::tvec4 const & x + ) + { + return detail::tvec4( + x.x < edge.x ? T(0) : T(1), + x.y < edge.y ? T(0) : T(1), + x.z < edge.z ? T(0) : T(1), + x.w < edge.w ? T(0) : T(1)); + } + + // smoothstep + template + GLM_FUNC_QUALIFIER genType smoothstep + ( + genType const & edge0, + genType const & edge1, + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'smoothstep' only accept floating-point inputs"); + + genType tmp = clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)); + return tmp * tmp * (genType(3) - genType(2) * tmp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 smoothstep + ( + typename detail::tvec2::value_type const & edge0, + typename detail::tvec2::value_type const & edge1, + detail::tvec2 const & x + ) + { + return detail::tvec2( + smoothstep(edge0, edge1, x.x), + smoothstep(edge0, edge1, x.y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 smoothstep + ( + typename detail::tvec3::value_type const & edge0, + typename detail::tvec3::value_type const & edge1, + detail::tvec3 const & x + ) + { + return detail::tvec3( + smoothstep(edge0, edge1, x.x), + smoothstep(edge0, edge1, x.y), + smoothstep(edge0, edge1, x.z)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 smoothstep + ( + typename detail::tvec4::value_type const & edge0, + typename detail::tvec4::value_type const & edge1, + detail::tvec4 const & x + ) + { + return detail::tvec4( + smoothstep(edge0, edge1, x.x), + smoothstep(edge0, edge1, x.y), + smoothstep(edge0, edge1, x.z), + smoothstep(edge0, edge1, x.w)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 smoothstep + ( + detail::tvec2 const & edge0, + detail::tvec2 const & edge1, + detail::tvec2 const & x + ) + { + return detail::tvec2( + smoothstep(edge0.x, edge1.x, x.x), + smoothstep(edge0.y, edge1.y, x.y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 smoothstep + ( + detail::tvec3 const & edge0, + detail::tvec3 const & edge1, + detail::tvec3 const & x + ) + { + return detail::tvec3( + smoothstep(edge0.x, edge1.x, x.x), + smoothstep(edge0.y, edge1.y, x.y), + smoothstep(edge0.z, edge1.z, x.z)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 smoothstep + ( + detail::tvec4 const & edge0, + detail::tvec4 const & edge1, + detail::tvec4 const & x + ) + { + return detail::tvec4( + smoothstep(edge0.x, edge1.x, x.x), + smoothstep(edge0.y, edge1.y, x.y), + smoothstep(edge0.z, edge1.z, x.z), + smoothstep(edge0.w, edge1.w, x.w)); + } + + // TODO: Not working on MinGW... + template + GLM_FUNC_QUALIFIER bool isnan(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'isnan' only accept floating-point inputs"); + +# if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL)) + return _isnan(x) != 0; +# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) +# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) + return _isnan(x) != 0; +# else + return std::isnan(x); +# endif +# elif(GLM_COMPILER & GLM_COMPILER_CUDA) + return isnan(x) != 0; +# else + return std::isnan(x); +# endif + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type isnan + ( + detail::tvec2 const & x + ) + { + return typename detail::tvec2::bool_type( + isnan(x.x), + isnan(x.y)); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type isnan + ( + detail::tvec3 const & x + ) + { + return typename detail::tvec3::bool_type( + isnan(x.x), + isnan(x.y), + isnan(x.z)); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type isnan + ( + detail::tvec4 const & x + ) + { + return typename detail::tvec4::bool_type( + isnan(x.x), + isnan(x.y), + isnan(x.z), + isnan(x.w)); + } + + template + GLM_FUNC_QUALIFIER bool isinf( + genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'isinf' only accept floating-point inputs"); + +# if(GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)) + return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; +# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) +# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) + 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 + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type isinf + ( + detail::tvec2 const & x + ) + { + return typename detail::tvec2::bool_type( + isinf(x.x), + isinf(x.y)); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type isinf + ( + detail::tvec3 const & x + ) + { + return typename detail::tvec3::bool_type( + isinf(x.x), + isinf(x.y), + isinf(x.z)); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type isinf + ( + detail::tvec4 const & x + ) + { + return typename detail::tvec4::bool_type( + isinf(x.x), + isinf(x.y), + isinf(x.z), + isinf(x.w)); + } + + GLM_FUNC_QUALIFIER int floatBitsToInt(float const & value) + { + union + { + float f; + int i; + } fi; + + fi.f = value; + return fi.i; + } + + GLM_FUNC_QUALIFIER detail::tvec2 floatBitsToInt + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + floatBitsToInt(value.x), + floatBitsToInt(value.y)); + } + + GLM_FUNC_QUALIFIER detail::tvec3 floatBitsToInt + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + floatBitsToInt(value.x), + floatBitsToInt(value.y), + floatBitsToInt(value.z)); + } + + GLM_FUNC_QUALIFIER detail::tvec4 floatBitsToInt + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + floatBitsToInt(value.x), + floatBitsToInt(value.y), + floatBitsToInt(value.z), + floatBitsToInt(value.w)); + } + + GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & value) + { + union + { + float f; + uint u; + } fu; + + fu.f = value; + return fu.u; + } + + GLM_FUNC_QUALIFIER detail::tvec2 floatBitsToUint + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + floatBitsToUint(value.x), + floatBitsToUint(value.y)); + } + + GLM_FUNC_QUALIFIER detail::tvec3 floatBitsToUint + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + floatBitsToUint(value.x), + floatBitsToUint(value.y), + floatBitsToUint(value.z)); + } + + GLM_FUNC_QUALIFIER detail::tvec4 floatBitsToUint + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + floatBitsToUint(value.x), + floatBitsToUint(value.y), + floatBitsToUint(value.z), + floatBitsToUint(value.w)); + } + + GLM_FUNC_QUALIFIER float intBitsToFloat(int const & value) + { + union + { + float f; + int i; + } fi; + + fi.i = value; + return fi.f; + } + + GLM_FUNC_QUALIFIER detail::tvec2 intBitsToFloat + + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + intBitsToFloat(value.x), + intBitsToFloat(value.y)); + } + + GLM_FUNC_QUALIFIER detail::tvec3 intBitsToFloat + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + intBitsToFloat(value.x), + intBitsToFloat(value.y), + intBitsToFloat(value.z)); + } + + GLM_FUNC_QUALIFIER detail::tvec4 intBitsToFloat + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + intBitsToFloat(value.x), + intBitsToFloat(value.y), + intBitsToFloat(value.z), + intBitsToFloat(value.w)); + } + + GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & value) + { + union + { + float f; + uint u; + } fu; + + fu.u = value; + return fu.f; + } + + GLM_FUNC_QUALIFIER detail::tvec2 uintBitsToFloat + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + uintBitsToFloat(value.x), + uintBitsToFloat(value.y)); + } + + GLM_FUNC_QUALIFIER detail::tvec3 uintBitsToFloat + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + uintBitsToFloat(value.x), + uintBitsToFloat(value.y), + uintBitsToFloat(value.z)); + } + + GLM_FUNC_QUALIFIER detail::tvec4 uintBitsToFloat + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + uintBitsToFloat(value.x), + uintBitsToFloat(value.y), + uintBitsToFloat(value.z), + uintBitsToFloat(value.w)); + } + + template + GLM_FUNC_QUALIFIER genType fma + ( + genType const & a, + genType const & b, + genType const & c + ) + { + return a * b + c; + } + + template + GLM_FUNC_QUALIFIER genType frexp + ( + genType const & x, + int & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 frexp + ( + detail::tvec2 const & x, + detail::tvec2 & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 frexp + ( + detail::tvec3 const & x, + detail::tvec3 & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 frexp + ( + detail::tvec4 const & x, + detail::tvec4 & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER genType ldexp + ( + genType const & x, + int const & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 ldexp + ( + detail::tvec2 const & x, + detail::tvec2 const & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 ldexp + ( + detail::tvec3 const & x, + detail::tvec3 const & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 ldexp + ( + detail::tvec4 const & x, + detail::tvec4 const & exp + ) + { + return std::frexp(x, exp); + } + +}//namespace glm diff --git a/Glm/core/func_exponential.hpp b/Glm/core/func_exponential.hpp new file mode 100644 index 0000000..ea7bd99 --- /dev/null +++ b/Glm/core/func_exponential.hpp @@ -0,0 +1,123 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_exponential.hpp +/// @date 2008-08-08 / 2011-06-14 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions +/// +/// @defgroup core_func_exponential Exponential functions +/// @ingroup core +/// +/// These all operate component-wise. The description is per component. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_func_exponential +#define glm_core_func_exponential GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_exponential + /// @{ + + /// Returns 'base' raised to the power 'exponent'. + /// + /// @param base Floating point value. pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @param exponent Floating point value representing the 'exponent'. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL pow man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType pow(genType const & base, genType const & exponent); + + /// Returns the natural exponentiation of x, i.e., e^x. + /// + /// @param x exp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL exp man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType exp(genType const & x); + + /// Returns the natural logarithm of x, i.e., + /// returns the value y which satisfies the equation x = e^y. + /// Results are undefined if x <= 0. + /// + /// @param x log function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL log man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType log(genType const & x); + + /// Returns 2 raised to the x power. + /// + /// @param x exp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL exp2 man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType exp2(genType const & x); + + /// Returns the base 2 log of x, i.e., returns the value y, + /// which satisfies the equation x = 2 ^ y. + /// + /// @param x log2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL log2 man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType log2(genType const & x); + + /// Returns the positive square root of x. + /// + /// @param x sqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL sqrt man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType sqrt(genType const & x); + + /// Returns the reciprocal of the positive square root of x. + /// + /// @param x inversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL inversesqrt man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType inversesqrt(genType const & x); + + /// @} +}//namespace glm + +#include "func_exponential.inl" + +#endif//glm_core_func_exponential diff --git a/Glm/core/func_exponential.inl b/Glm/core/func_exponential.inl new file mode 100644 index 0000000..cee5605 --- /dev/null +++ b/Glm/core/func_exponential.inl @@ -0,0 +1,156 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_exponential.inl +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + // pow + template + GLM_FUNC_QUALIFIER genType pow + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'pow' only accept floating-point input"); + + return genType(::std::pow(x, y)); + } + + VECTORIZE_VEC_VEC(pow) + + // exp + template + GLM_FUNC_QUALIFIER genType exp + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'exp' only accept floating-point input"); + + return genType(::std::exp(x)); + } + + VECTORIZE_VEC(exp) + + // log + template + GLM_FUNC_QUALIFIER genType log + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'log' only accept floating-point input"); + + return genType(::std::log(x)); + } + + VECTORIZE_VEC(log) + + //exp2, ln2 = 0.69314718055994530941723212145818f + template + GLM_FUNC_QUALIFIER genType exp2 + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'exp2' only accept floating-point input"); + + return genType(::std::exp(genType(0.69314718055994530941723212145818) * x)); + } + + VECTORIZE_VEC(exp2) + +namespace _detail +{ + template + struct _compute_log2 + { + template + T operator() (T const & Value) const; +/* + { + GLM_STATIC_ASSERT(0, "'log2' parameter has an invalid template parameter type. GLM core features only supports floating-point types, include for integer types support. Others types are not supported."); + return Value; + } +*/ + }; + + template <> + struct _compute_log2 + { + template + T operator() (T const & Value) const + { + return T(::std::log(Value)) / T(0.69314718055994530941723212145818); + } + }; + +}//namespace _detail + + // log2, ln2 = 0.69314718055994530941723212145818f + template + GLM_FUNC_QUALIFIER genType log2 + ( + genType const & x + ) + { + assert(x > genType(0)); // log2 is only defined on the range (0, inf] + return _detail::_compute_log2::ID>()(x); + } + + VECTORIZE_VEC(log2) + + // sqrt + template + GLM_FUNC_QUALIFIER genType sqrt + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'sqrt' only accept floating-point input"); + + return genType(::std::sqrt(x)); + } + + VECTORIZE_VEC(sqrt) + + template + GLM_FUNC_QUALIFIER genType inversesqrt + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'inversesqrt' only accept floating-point input"); + assert(x > genType(0)); + + return genType(1) / ::std::sqrt(x); + } + + VECTORIZE_VEC(inversesqrt) + +}//namespace glm diff --git a/Glm/core/func_geometric.hpp b/Glm/core/func_geometric.hpp new file mode 100644 index 0000000..3357dd0 --- /dev/null +++ b/Glm/core/func_geometric.hpp @@ -0,0 +1,138 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_geometric.hpp +/// @date 2008-08-03 / 2011-06-14 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions +/// +/// @defgroup core_func_geometric Geometric functions +/// @ingroup core +/// +/// These operate on vectors as vectors, not component-wise. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_func_geometric +#define glm_core_func_geometric GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_geometric + /// @{ + + /// Returns the length of x, i.e., sqrt(x * x). + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL length man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL typename genType::value_type length( + genType const & x); + + /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL distance man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL typename genType::value_type distance( + genType const & p0, + genType const & p1); + + /// Returns the dot product of x and y, i.e., result = x * y. + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL dot man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL typename genType::value_type dot( + genType const & x, + genType const & y); + + /// Returns the cross product of x and y. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL cross man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL detail::tvec3 cross( + detail::tvec3 const & x, + detail::tvec3 const & y); + + /// Returns a vector in the same direction as x but with length of 1. + /// + /// @see GLSL normalize man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL genType normalize( + genType const & x); + + /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL faceforward man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL genType faceforward( + genType const & N, + genType const & I, + genType const & Nref); + + /// For the incident vector I and surface orientation N, + /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL reflect man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL genType reflect( + genType const & I, + genType const & N); + + /// For the incident vector I and surface normal N, + /// and the ratio of indices of refraction eta, + /// return the refraction vector. + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL refract man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL genType refract( + genType const & I, + genType const & N, + typename genType::value_type const & eta); + + /// @} +}//namespace glm + +#include "func_geometric.inl" + +#endif//glm_core_func_geometric diff --git a/Glm/core/func_geometric.inl b/Glm/core/func_geometric.inl new file mode 100644 index 0000000..ddb9af2 --- /dev/null +++ b/Glm/core/func_geometric.inl @@ -0,0 +1,321 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_geometric.inl +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + // length + template + GLM_FUNC_QUALIFIER genType length + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); + + genType sqr = x * x; + return sqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::value_type length + ( + detail::tvec2 const & v + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); + + typename detail::tvec2::value_type sqr = v.x * v.x + v.y * v.y; + return sqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec3::value_type length + ( + detail::tvec3 const & v + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); + + typename detail::tvec3::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z; + return sqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec4::value_type length + ( + detail::tvec4 const & v + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); + + typename detail::tvec4::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w; + return sqrt(sqr); + } + + // distance + template + GLM_FUNC_QUALIFIER genType distance + ( + genType const & p0, + genType const & p1 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); + + return length(p1 - p0); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::value_type distance + ( + detail::tvec2 const & p0, + detail::tvec2 const & p1 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); + + return length(p1 - p0); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec3::value_type distance + ( + detail::tvec3 const & p0, + detail::tvec3 const & p1 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); + + return length(p1 - p0); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec4::value_type distance + ( + detail::tvec4 const & p0, + detail::tvec4 const & p1 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); + + return length(p1 - p0); + } + + // dot + template + GLM_FUNC_QUALIFIER genType dot + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); + + return x * y; + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::value_type dot + ( + detail::tvec2 const & x, + detail::tvec2 const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); + + return x.x * y.x + x.y * y.y; + } + + template + GLM_FUNC_QUALIFIER T dot + ( + detail::tvec3 const & x, + detail::tvec3 const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); + + return x.x * y.x + x.y * y.y + x.z * y.z; + } +/* // SSE3 + GLM_FUNC_QUALIFIER float dot(const tvec4& x, const tvec4& y) + { + float Result; + __asm + { + mov esi, x + mov edi, y + movaps xmm0, [esi] + mulps xmm0, [edi] + haddps( _xmm0, _xmm0 ) + haddps( _xmm0, _xmm0 ) + movss Result, xmm0 + } + return Result; + } +*/ + template + GLM_FUNC_QUALIFIER T dot + ( + detail::tvec4 const & x, + detail::tvec4 const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); + + return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w; + } + + // cross + template + GLM_FUNC_QUALIFIER detail::tvec3 cross + ( + detail::tvec3 const & x, + detail::tvec3 const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'cross' only accept floating-point inputs"); + + return detail::tvec3( + x.y * y.z - y.y * x.z, + x.z * y.x - y.z * x.x, + x.x * y.y - y.x * x.y); + } + + // normalize + template + GLM_FUNC_QUALIFIER genType normalize + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); + + return x < genType(0) ? genType(-1) : genType(1); + } + + // According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error + template + GLM_FUNC_QUALIFIER detail::tvec2 normalize + ( + detail::tvec2 const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); + + typename detail::tvec2::value_type sqr = x.x * x.x + x.y * x.y; + return x * inversesqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 normalize + ( + detail::tvec3 const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); + + typename detail::tvec3::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z; + return x * inversesqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 normalize + ( + detail::tvec4 const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); + + typename detail::tvec4::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w; + return x * inversesqrt(sqr); + } + + // faceforward + template + GLM_FUNC_QUALIFIER genType faceforward + ( + genType const & N, + genType const & I, + genType const & Nref + ) + { + return dot(Nref, I) < 0 ? N : -N; + } + + // reflect + template + GLM_FUNC_QUALIFIER genType reflect + ( + genType const & I, + genType const & N + ) + { + return I - N * dot(N, I) * genType(2); + } + + // refract + template + GLM_FUNC_QUALIFIER genType refract + ( + genType const & I, + genType const & N, + genType const & eta + ) + { + //It could be a vector + //GLM_STATIC_ASSERT(detail::type::is_float); + + genType dotValue = dot(N, I); + genType k = genType(1) - eta * eta * (genType(1) - dotValue * dotValue); + if(k < genType(0)) + return genType(0); + else + return eta * I - (eta * dotValue + sqrt(k)) * N; + } + + template + GLM_FUNC_QUALIFIER genType refract + ( + genType const & I, + genType const & N, + typename genType::value_type const & eta + ) + { + //It could be a vector + //GLM_STATIC_ASSERT(detail::type::is_float); + + typename genType::value_type dotValue = dot(N, I); + typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue); + if(k < typename genType::value_type(0)) + return genType(0); + else + return eta * I - (eta * dotValue + sqrt(k)) * N; + } + +}//namespace glm diff --git a/Glm/core/func_integer.hpp b/Glm/core/func_integer.hpp new file mode 100644 index 0000000..b5057f8 --- /dev/null +++ b/Glm/core/func_integer.hpp @@ -0,0 +1,201 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_integer.hpp +/// @date 2010-03-17 / 2011-06-18 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.8 Integer Functions +/// +/// @defgroup core_func_integer Integer functions +/// @ingroup core +/// +/// These all operate component-wise. The description is per component. +/// The notation [a, b] means the set of bits from bit-number a through bit-number +/// b, inclusive. The lowest-order bit is bit 0. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_func_integer +#define glm_core_func_integer GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_integer + /// @{ + + /// Adds 32-bit unsigned integer x and y, returning the sum + /// modulo pow(2, 32). The value carry is set to 0 if the sum was + /// less than pow(2, 32), or to 1 otherwise. + /// + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL uaddCarry man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genUType uaddCarry( + genUType const & x, + genUType const & y, + genUType & carry); + + /// Subtracts the 32-bit unsigned integer y from x, returning + /// the difference if non-negative, or pow(2, 32) plus the difference + /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. + /// + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL usubBorrow man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genUType usubBorrow( + genUType const & x, + genUType const & y, + genUType & borrow); + + /// Multiplies 32-bit integers x and y, producing a 64-bit + /// result. The 32 least-significant bits are returned in lsb. + /// The 32 most-significant bits are returned in msb. + /// + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL umulExtended man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL void umulExtended( + genUType const & x, + genUType const & y, + genUType & msb, + genUType & lsb); + + /// Multiplies 32-bit integers x and y, producing a 64-bit + /// result. The 32 least-significant bits are returned in lsb. + /// The 32 most-significant bits are returned in msb. + /// + /// @tparam genIType Signed integer scalar or vector types. + /// + /// @see GLSL imulExtended man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL void imulExtended( + genIType const & x, + genIType const & y, + genIType & msb, + genIType & lsb); + + /// Extracts bits [offset, offset + bits - 1] from value, + /// returning them in the least significant bits of the result. + /// For unsigned data types, the most significant bits of the + /// result will be set to zero. For signed data types, the + /// most significant bits will be set to the value of bit offset + base - 1. + /// + /// If bits is zero, the result will be zero. The result will be + /// undefined if offset or bits is negative, or if the sum of + /// offset and bits is greater than the number of bits used + /// to store the operand. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL bitfieldExtract man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genIUType bitfieldExtract( + genIUType const & Value, + int const & Offset, + int const & Bits); + + /// Returns the insertion the bits least-significant bits of insert into base. + /// + /// The result will have bits [offset, offset + bits - 1] taken + /// from bits [0, bits - 1] of insert, and all other bits taken + /// directly from the corresponding bits of base. If bits is + /// zero, the result will simply be base. The result will be + /// undefined if offset or bits is negative, or if the sum of + /// offset and bits is greater than the number of bits used to + /// store the operand. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL bitfieldInsert man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genIUType bitfieldInsert( + genIUType const & Base, + genIUType const & Insert, + int const & Offset, + int const & Bits); + + /// Returns the reversal of the bits of value. + /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, + /// where bits is the total number of bits used to represent value. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL bitfieldReverse man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genIUType bitfieldReverse(genIUType const & Value); + + /// Returns the number of bits set to 1 in the binary representation of value. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL bitCount man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + /// + /// @todo Clarify the declaration to specify that scalars are suported. + template class genIUType> + GLM_FUNC_DECL typename genIUType::signed_type bitCount(genIUType const & Value); + + /// Returns the bit number of the least significant bit set to + /// 1 in the binary representation of value. + /// If value is zero, -1 will be returned. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL findLSB man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + /// + /// @todo Clarify the declaration to specify that scalars are suported. + template class genIUType> + GLM_FUNC_DECL typename genIUType::signed_type findLSB(genIUType const & Value); + + /// Returns the bit number of the most significant bit in the binary representation of value. + /// For positive integers, the result will be the bit number of the most significant bit set to 1. + /// For negative integers, the result will be the bit number of the most significant + /// bit set to 0. For a value of zero or negative one, -1 will be returned. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL findMSB man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + /// + /// @todo Clarify the declaration to specify that scalars are suported. + template class genIUType> + GLM_FUNC_DECL typename genIUType::signed_type findMSB(genIUType const & Value); + + /// @} +}//namespace glm + +#include "func_integer.inl" + +#endif//glm_core_func_integer + diff --git a/Glm/core/func_integer.inl b/Glm/core/func_integer.inl new file mode 100644 index 0000000..3784b16 --- /dev/null +++ b/Glm/core/func_integer.inl @@ -0,0 +1,648 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_integer.inl +/// @date 2010-03-17 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#if(GLM_ARCH != GLM_ARCH_PURE) +#if(GLM_COMPILER & GLM_COMPILER_VC) +# include +# pragma intrinsic(_BitScanReverse) +#endif//(GLM_COMPILER & GLM_COMPILER_VC) +#endif//(GLM_ARCH != GLM_ARCH_PURE) + +namespace glm +{ + // uaddCarry + template + GLM_FUNC_QUALIFIER genUType uaddCarry + ( + genUType const & x, + genUType const & y, + genUType & Carry + ) + { + detail::highp_uint_t Value64 = detail::highp_uint_t(x) + detail::highp_uint_t(y); + genUType Result = genUType(Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))); + Carry = (Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))) > 1 ? 1 : 0; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 uaddCarry + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 & Carry + ) + { + return detail::tvec2( + uaddCarry(x[0], y[0], Carry[0]), + uaddCarry(x[1], y[1], Carry[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 uaddCarry + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 & Carry + ) + { + return detail::tvec3( + uaddCarry(x[0], y[0], Carry[0]), + uaddCarry(x[1], y[1], Carry[1]), + uaddCarry(x[2], y[2], Carry[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 uaddCarry + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 & Carry + ) + { + return detail::tvec4( + uaddCarry(x[0], y[0], Carry[0]), + uaddCarry(x[1], y[1], Carry[1]), + uaddCarry(x[2], y[2], Carry[2]), + uaddCarry(x[3], y[3], Carry[3])); + } + + // usubBorrow + template + GLM_FUNC_QUALIFIER genUType usubBorrow + ( + genUType const & x, + genUType const & y, + genUType & Borrow + ) + { + Borrow = x >= y ? 0 : 1; + if(x > y) + return genUType(detail::highp_int_t(x) - detail::highp_int_t(y)); + else + return genUType((detail::highp_int_t(1) << detail::highp_int_t(32)) + detail::highp_int_t(x) - detail::highp_int_t(y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 usubBorrow + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 & Borrow + ) + { + return detail::tvec2( + usubBorrow(x[0], y[0], Borrow[0]), + usubBorrow(x[1], y[1], Borrow[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 usubBorrow + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 & Borrow + ) + { + return detail::tvec3( + usubBorrow(x[0], y[0], Borrow[0]), + usubBorrow(x[1], y[1], Borrow[1]), + usubBorrow(x[2], y[2], Borrow[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 usubBorrow + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 & Borrow + ) + { + return detail::tvec4( + usubBorrow(x[0], y[0], Borrow[0]), + usubBorrow(x[1], y[1], Borrow[1]), + usubBorrow(x[2], y[2], Borrow[2]), + usubBorrow(x[3], y[3], Borrow[3])); + } + + // umulExtended + template + GLM_FUNC_QUALIFIER void umulExtended + ( + genUType const & x, + genUType const & y, + genUType & msb, + genUType & lsb + ) + { + detail::highp_uint_t ValueX64 = x; + detail::highp_uint_t ValueY64 = y; + detail::highp_uint_t Value64 = ValueX64 * ValueY64; + msb = *(genUType*)&genUType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1))); + lsb = *(genUType*)&genUType(Value64 >> detail::highp_uint_t(32)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 umulExtended + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 & msb, + detail::tvec2 & lsb + ) + { + return detail::tvec2( + umulExtended(x[0], y[0], msb, lsb), + umulExtended(x[1], y[1], msb, lsb)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 umulExtended + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 & msb, + detail::tvec3 & lsb + ) + { + return detail::tvec3( + umulExtended(x[0], y[0], msb, lsb), + umulExtended(x[1], y[1], msb, lsb), + umulExtended(x[2], y[2], msb, lsb)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 umulExtended + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 & msb, + detail::tvec4 & lsb + ) + { + return detail::tvec4( + umulExtended(x[0], y[0], msb, lsb), + umulExtended(x[1], y[1], msb, lsb), + umulExtended(x[2], y[2], msb, lsb), + umulExtended(x[3], y[3], msb, lsb)); + } + + // imulExtended + template + GLM_FUNC_QUALIFIER void imulExtended + ( + genIType const & x, + genIType const & y, + genIType & msb, + genIType & lsb + ) + { + detail::highp_int_t ValueX64 = x; + detail::highp_int_t ValueY64 = y; + detail::highp_int_t Value64 = ValueX64 * ValueY64; + msb = *(genIType*)&genIType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1))); + lsb = *(genIType*)&genIType(Value64 >> detail::highp_uint_t(32)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 imulExtended + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 & msb, + detail::tvec2 & lsb + ) + { + return detail::tvec2( + imulExtended(x[0], y[0], msb, lsb), + imulExtended(x[1], y[1], msb, lsb)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 imulExtended + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 & msb, + detail::tvec3 & lsb + ) + { + return detail::tvec3( + imulExtended(x[0], y[0], msb, lsb), + imulExtended(x[1], y[1], msb, lsb), + imulExtended(x[2], y[2], msb, lsb)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 imulExtended + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 & msb, + detail::tvec4 & lsb + ) + { + return detail::tvec4( + imulExtended(x[0], y[0], msb, lsb), + imulExtended(x[1], y[1], msb, lsb), + imulExtended(x[2], y[2], msb, lsb), + imulExtended(x[3], y[3], msb, lsb)); + } + + // bitfieldExtract + template + GLM_FUNC_QUALIFIER genIUType bitfieldExtract + ( + genIUType const & Value, + int const & Offset, + int const & Bits + ) + { + int GenSize = int(sizeof(genIUType)) << int(3); + + assert(Offset + Bits <= GenSize); + + genIUType ShiftLeft = Bits ? Value << (GenSize - (Bits + Offset)) : genIUType(0); + genIUType ShiftBack = ShiftLeft >> genIUType(GenSize - Bits); + + return ShiftBack; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 bitfieldExtract + ( + detail::tvec2 const & Value, + int const & Offset, + int const & Bits + ) + { + return detail::tvec2( + bitfieldExtract(Value[0], Offset, Bits), + bitfieldExtract(Value[1], Offset, Bits)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 bitfieldExtract + ( + detail::tvec3 const & Value, + int const & Offset, + int const & Bits + ) + { + return detail::tvec3( + bitfieldExtract(Value[0], Offset, Bits), + bitfieldExtract(Value[1], Offset, Bits), + bitfieldExtract(Value[2], Offset, Bits)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 bitfieldExtract + ( + detail::tvec4 const & Value, + int const & Offset, + int const & Bits + ) + { + return detail::tvec4( + bitfieldExtract(Value[0], Offset, Bits), + bitfieldExtract(Value[1], Offset, Bits), + bitfieldExtract(Value[2], Offset, Bits), + bitfieldExtract(Value[3], Offset, Bits)); + } + + // bitfieldInsert + template + GLM_FUNC_QUALIFIER genIUType bitfieldInsert + ( + genIUType const & Base, + genIUType const & Insert, + int const & Offset, + int const & Bits + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); + assert(Offset + Bits <= sizeof(genIUType)); + + if(Bits == 0) + return Base; + + genIUType Mask = 0; + for(int Bit = Offset; Bit < Offset + Bits; ++Bit) + Mask |= (1 << Bit); + + return (Base & ~Mask) | (Insert & Mask); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 bitfieldInsert + ( + detail::tvec2 const & Base, + detail::tvec2 const & Insert, + int const & Offset, + int const & Bits + ) + { + return detail::tvec2( + bitfieldInsert(Base[0], Insert[0], Offset, Bits), + bitfieldInsert(Base[1], Insert[1], Offset, Bits)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 bitfieldInsert + ( + detail::tvec3 const & Base, + detail::tvec3 const & Insert, + int const & Offset, + int const & Bits + ) + { + return detail::tvec3( + bitfieldInsert(Base[0], Insert[0], Offset, Bits), + bitfieldInsert(Base[1], Insert[1], Offset, Bits), + bitfieldInsert(Base[2], Insert[2], Offset, Bits)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 bitfieldInsert + ( + detail::tvec4 const & Base, + detail::tvec4 const & Insert, + int const & Offset, + int const & Bits + ) + { + return detail::tvec4( + bitfieldInsert(Base[0], Insert[0], Offset, Bits), + bitfieldInsert(Base[1], Insert[1], Offset, Bits), + bitfieldInsert(Base[2], Insert[2], Offset, Bits), + bitfieldInsert(Base[3], Insert[3], Offset, Bits)); + } + + // bitfieldReverse + template + GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType const & Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); + + genIUType Out = 0; + std::size_t BitSize = sizeof(genIUType) * 8; + for(std::size_t i = 0; i < BitSize; ++i) + if(Value & (genIUType(1) << i)) + Out |= genIUType(1) << (BitSize - 1 - i); + return Out; + } + + VECTORIZE_VEC(bitfieldReverse) + + // bitCount + template + GLM_FUNC_QUALIFIER int bitCount(genIUType const & Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); + + int Count = 0; + for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i) + { + if(Value & (1 << i)) + ++Count; + } + return Count; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 bitCount + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + bitCount(value[0]), + bitCount(value[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 bitCount + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + bitCount(value[0]), + bitCount(value[1]), + bitCount(value[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 bitCount + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + bitCount(value[0]), + bitCount(value[1]), + bitCount(value[2]), + bitCount(value[3])); + } + + // findLSB + template + GLM_FUNC_QUALIFIER int findLSB + ( + genIUType const & Value + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); + if(Value == 0) + return -1; + + genIUType Bit; + for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){} + return Bit; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 findLSB + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + findLSB(value[0]), + findLSB(value[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 findLSB + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + findLSB(value[0]), + findLSB(value[1]), + findLSB(value[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 findLSB + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + findLSB(value[0]), + findLSB(value[1]), + findLSB(value[2]), + findLSB(value[3])); + } + + // findMSB +#if((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_VC)) + + template + GLM_FUNC_QUALIFIER int findMSB + ( + genIUType const & Value + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + if(Value == 0) + return -1; + + unsigned long Result(0); + _BitScanReverse(&Result, Value); + return int(Result); + } +/* +// __builtin_clz seems to be buggy as it crasks for some values, from 0x00200000 to 80000000 +#elif((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC40)) + + template + GLM_FUNC_QUALIFIER int findMSB + ( + genIUType const & Value + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + if(Value == 0) + return -1; + + // clz returns the number or trailing 0-bits; see + // http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Other-Builtins.html + // + // NoteBecause __builtin_clz only works for unsigned ints, this + // implementation will not work for 64-bit integers. + // + return 31 - __builtin_clzl(Value); + } +*/ +#else + +/* SSE implementation idea + + __m128i const Zero = _mm_set_epi32( 0, 0, 0, 0); + __m128i const One = _mm_set_epi32( 1, 1, 1, 1); + __m128i Bit = _mm_set_epi32(-1, -1, -1, -1); + __m128i Tmp = _mm_set_epi32(Value, Value, Value, Value); + __m128i Mmi = Zero; + for(int i = 0; i < 32; ++i) + { + __m128i Shilt = _mm_and_si128(_mm_cmpgt_epi32(Tmp, One), One); + Tmp = _mm_srai_epi32(Tmp, One); + Bit = _mm_add_epi32(Bit, _mm_and_si128(Shilt, i)); + Mmi = _mm_and_si128(Mmi, One); + } + return Bit; + +*/ + + template + GLM_FUNC_QUALIFIER int findMSB + ( + genIUType const & Value + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + + if(Value == genIUType(0) || Value == genIUType(-1)) + return -1; + else if(Value > 0) + { + genIUType Bit = genIUType(-1); + for(genIUType tmp = Value; tmp > 0; tmp >>= 1, ++Bit){} + return Bit; + } + else //if(Value < 0) + { + int const BitCount(sizeof(genIUType) * 8); + int MostSignificantBit(-1); + for(int BitIndex(0); BitIndex < BitCount; ++BitIndex) + MostSignificantBit = (Value & (1 << BitIndex)) ? MostSignificantBit : BitIndex; + assert(MostSignificantBit >= 0); + return MostSignificantBit; + } + } +#endif//(GLM_COMPILER) + + template + GLM_FUNC_QUALIFIER detail::tvec2 findMSB + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + findMSB(value[0]), + findMSB(value[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 findMSB + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + findMSB(value[0]), + findMSB(value[1]), + findMSB(value[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 findMSB + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + findMSB(value[0]), + findMSB(value[1]), + findMSB(value[2]), + findMSB(value[3])); + } +}//namespace glm diff --git a/Glm/core/func_matrix.hpp b/Glm/core/func_matrix.hpp new file mode 100644 index 0000000..3b7a85b --- /dev/null +++ b/Glm/core/func_matrix.hpp @@ -0,0 +1,150 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_matrix.hpp +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions +/// +/// @defgroup core_func_matrix Matrix functions +/// @ingroup core +/// +/// For each of the following built-in matrix functions, there is both a +/// single-precision floating point version, where all arguments and return values +/// are single precision, and a double-precision floating version, where all +/// arguments and return values are double precision. Only the single-precision +/// floating point version is shown. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_matrix +#define GLM_CORE_func_matrix GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_matrix + /// @{ + + /// Multiply matrix x by matrix y component-wise, i.e., + /// result[i][j] is the scalar product of x[i][j] and y[i][j]. + /// + /// @tparam matType Floating-point matrix types. + /// + /// @see GLSL matrixCompMult man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL matType matrixCompMult( + matType const & x, + matType const & y); + + /// Treats the first parameter c as a column vector + /// and the second parameter r as a row vector + /// and does a linear algebraic matrix multiply c * r. + /// + /// @tparam matType Floating-point matrix types. + /// + /// @see GLSL outerProduct man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + /// + /// @todo Clarify the declaration to specify that matType doesn't have to be provided when used. + template + GLM_FUNC_DECL matType outerProduct( + vecType const & c, + vecType const & r); + + /// Returns the transposed matrix of x + /// + /// @tparam matType Floating-point matrix types. + /// + /// @see GLSL transpose man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL typename matType::transpose_type transpose( + matType const & x); + + /// Return the determinant of a mat2 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL determinant man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL typename detail::tmat2x2::value_type determinant( + detail::tmat2x2 const & m); + + /// Return the determinant of a mat3 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL determinant man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL typename detail::tmat3x3::value_type determinant( + detail::tmat3x3 const & m); + + /// Return the determinant of a mat4 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL determinant man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL typename detail::tmat4x4::value_type determinant( + detail::tmat4x4 const & m); + + /// Return the inverse of a mat2 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL inverse man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL detail::tmat2x2 inverse( + detail::tmat2x2 const & m); + + /// Return the inverse of a mat3 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL inverse man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL detail::tmat3x3 inverse( + detail::tmat3x3 const & m); + + /// Return the inverse of a mat4 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL inverse man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL detail::tmat4x4 inverse( + detail::tmat4x4 const & m); + + /// @} +}//namespace glm + +#include "func_matrix.inl" + +#endif//GLM_CORE_func_matrix diff --git a/Glm/core/func_matrix.inl b/Glm/core/func_matrix.inl new file mode 100644 index 0000000..6bec8c7 --- /dev/null +++ b/Glm/core/func_matrix.inl @@ -0,0 +1,582 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_matrix.inl +/// @date 2008-03-08 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + // matrixCompMult + template + GLM_FUNC_QUALIFIER matType matrixCompMult + ( + matType const & x, + matType const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'matrixCompMult' only accept floating-point inputs"); + + matType result(matType::null); + for(typename matType::size_type i = 0; i < matType::row_size(); ++i) + result[i] = x[i] * y[i]; + return result; + } + + // outerProduct + template + GLM_FUNC_QUALIFIER detail::tmat2x2 outerProduct + ( + detail::tvec2 const & c, + detail::tvec2 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat2x2 m(detail::tmat2x2::null); + m[0][0] = c[0] * r[0]; + m[0][1] = c[1] * r[0]; + m[1][0] = c[0] * r[1]; + m[1][1] = c[1] * r[1]; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x3 outerProduct + ( + detail::tvec3 const & c, + detail::tvec3 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat3x3 m(detail::tmat3x3::null); + for(typename detail::tmat3x3::size_type i(0); i < m.length(); ++i) + m[i] = c * r[i]; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x4 outerProduct + ( + detail::tvec4 const & c, + detail::tvec4 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat4x4 m(detail::tmat4x4::null); + for(typename detail::tmat4x4::size_type i(0); i < m.length(); ++i) + m[i] = c * r[i]; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x3 outerProduct + ( + detail::tvec3 const & c, + detail::tvec2 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat2x3 m(detail::tmat2x3::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[0][2] = c.z * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[1][2] = c.z * r.y; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x2 outerProduct + ( + detail::tvec2 const & c, + detail::tvec3 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat3x2 m(detail::tmat3x2::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[2][0] = c.x * r.z; + m[2][1] = c.y * r.z; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x4 outerProduct + ( + detail::tvec4 const & c, + detail::tvec2 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat2x4 m(detail::tmat2x4::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[0][2] = c.z * r.x; + m[0][3] = c.w * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[1][2] = c.z * r.y; + m[1][3] = c.w * r.y; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x2 outerProduct + ( + detail::tvec2 const & c, + detail::tvec4 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat4x2 m(detail::tmat4x2::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[2][0] = c.x * r.z; + m[2][1] = c.y * r.z; + m[3][0] = c.x * r.w; + m[3][1] = c.y * r.w; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x4 outerProduct + ( + detail::tvec4 const & c, + detail::tvec3 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat3x4 m(detail::tmat3x4::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[0][2] = c.z * r.x; + m[0][3] = c.w * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[1][2] = c.z * r.y; + m[1][3] = c.w * r.y; + m[2][0] = c.x * r.z; + m[2][1] = c.y * r.z; + m[2][2] = c.z * r.z; + m[2][3] = c.w * r.z; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x3 outerProduct + ( + detail::tvec3 const & c, + detail::tvec4 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat4x3 m(detail::tmat4x3::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[0][2] = c.z * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[1][2] = c.z * r.y; + m[2][0] = c.x * r.z; + m[2][1] = c.y * r.z; + m[2][2] = c.z * r.z; + m[3][0] = c.x * r.w; + m[3][1] = c.y * r.w; + m[3][2] = c.z * r.w; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x2 transpose + ( + detail::tmat2x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat2x2 result(detail::tmat2x2::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x3 transpose + ( + detail::tmat3x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat3x3 result(detail::tmat3x3::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[2][2] = m[2][2]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x4 transpose + ( + detail::tmat4x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat4x4 result(detail::tmat4x4::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[0][3] = m[3][0]; + + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + result[1][3] = m[3][1]; + + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[2][2] = m[2][2]; + result[2][3] = m[3][2]; + + result[3][0] = m[0][3]; + result[3][1] = m[1][3]; + result[3][2] = m[2][3]; + result[3][3] = m[3][3]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x3 transpose + ( + detail::tmat3x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat2x3 result(detail::tmat2x3::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x2 transpose + ( + detail::tmat2x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat3x2 result(detail::tmat3x2::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x4 transpose + ( + detail::tmat4x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat2x4 result(detail::tmat2x4::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[0][3] = m[3][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + result[1][3] = m[3][1]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x2 transpose + ( + detail::tmat2x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat4x2 result(detail::tmat4x2::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[3][0] = m[0][3]; + result[3][1] = m[1][3]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x4 transpose + ( + detail::tmat4x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat3x4 result(detail::tmat3x4::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[0][3] = m[3][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + result[1][3] = m[3][1]; + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[2][2] = m[2][2]; + result[2][3] = m[3][2]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x3 transpose + ( + detail::tmat3x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat4x3 result(detail::tmat4x3::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[2][2] = m[2][2]; + result[3][0] = m[0][3]; + result[3][1] = m[1][3]; + result[3][2] = m[2][3]; + return result; + } + + template + GLM_FUNC_QUALIFIER typename detail::tmat2x2::value_type determinant + ( + detail::tmat2x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); + + return m[0][0] * m[1][1] - m[1][0] * m[0][1]; + } + + template + GLM_FUNC_QUALIFIER typename detail::tmat3x3::value_type determinant + ( + detail::tmat3x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); + + return + + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) + - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) + + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + } + + template + GLM_FUNC_QUALIFIER typename detail::tmat4x4::value_type determinant + ( + detail::tmat4x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); + + T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; + T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; + T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; + T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; + T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; + T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; + + detail::tvec4 DetCof( + + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), + - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), + + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), + - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); + + return m[0][0] * DetCof[0] + + m[0][1] * DetCof[1] + + m[0][2] * DetCof[2] + + m[0][3] * DetCof[3]; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x2 inverse + ( + detail::tmat2x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); + + //valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; + T Determinant = determinant(m); + + detail::tmat2x2 Inverse( + + m[1][1] / Determinant, + - m[0][1] / Determinant, + - m[1][0] / Determinant, + + m[0][0] / Determinant); + + return Inverse; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x3 inverse + ( + detail::tmat3x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); + + //valType Determinant = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) + // - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) + // + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + + T Determinant = determinant(m); + + detail::tmat3x3 Inverse(detail::tmat3x3::null); + Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); + Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); + Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); + Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); + Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); + Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); + Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); + Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); + Inverse /= Determinant; + + return Inverse; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x4 inverse + ( + detail::tmat4x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); + + T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; + T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; + T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; + + T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; + T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; + T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; + + T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; + T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; + T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; + + T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; + T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; + T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; + + T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; + T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; + T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; + + T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; + T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; + T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; + + detail::tvec4 const SignA(+1, -1, +1, -1); + detail::tvec4 const SignB(-1, +1, -1, +1); + + detail::tvec4 Fac0(Coef00, Coef00, Coef02, Coef03); + detail::tvec4 Fac1(Coef04, Coef04, Coef06, Coef07); + detail::tvec4 Fac2(Coef08, Coef08, Coef10, Coef11); + detail::tvec4 Fac3(Coef12, Coef12, Coef14, Coef15); + detail::tvec4 Fac4(Coef16, Coef16, Coef18, Coef19); + detail::tvec4 Fac5(Coef20, Coef20, Coef22, Coef23); + + detail::tvec4 Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); + detail::tvec4 Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); + detail::tvec4 Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); + detail::tvec4 Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); + + detail::tvec4 Inv0 = SignA * (Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); + detail::tvec4 Inv1 = SignB * (Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); + detail::tvec4 Inv2 = SignA * (Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); + detail::tvec4 Inv3 = SignB * (Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); + + detail::tmat4x4 Inverse(Inv0, Inv1, Inv2, Inv3); + + detail::tvec4 Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); + + T Determinant = glm::dot(m[0], Row0); + + Inverse /= Determinant; + + return Inverse; + } +}//namespace glm diff --git a/Glm/core/func_noise.hpp b/Glm/core/func_noise.hpp new file mode 100644 index 0000000..cca7840 --- /dev/null +++ b/Glm/core/func_noise.hpp @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_noise.hpp +/// @date 2008-08-01 / 2011-06-18 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.13 Noise Functions +/// +/// @defgroup core_func_noise Noise functions +/// @ingroup core +/// +/// Noise functions are stochastic functions that can be used to increase visual +/// complexity. Values returned by the following noise functions give the +/// appearance of randomness, but are not truly random. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_func_noise +#define glm_core_func_noise GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_noise + /// @{ + + /// Returns a 1D noise value based on the input value x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL noise1 man page + /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions + template + GLM_FUNC_DECL typename genType::value_type noise1(genType const & x); + + /// Returns a 2D noise value based on the input value x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL noise2 man page + /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions + template + GLM_FUNC_DECL detail::tvec2 noise2(genType const & x); + + /// Returns a 3D noise value based on the input value x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL noise3 man page + /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions + template + GLM_FUNC_DECL detail::tvec3 noise3(genType const & x); + + /// Returns a 4D noise value based on the input value x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL noise4 man page + /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions + template + GLM_FUNC_DECL detail::tvec4 noise4(genType const & x); + + /// @} +}//namespace glm + +#include "func_noise.inl" + +#endif//glm_core_func_noise diff --git a/Glm/core/func_noise.inl b/Glm/core/func_noise.inl new file mode 100644 index 0000000..a2658b5 --- /dev/null +++ b/Glm/core/func_noise.inl @@ -0,0 +1,364 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_noise.inl +/// @date 2008-08-01 / 2011-09-27 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + template + GLM_FUNC_QUALIFIER T noise1(T const & x) + { + return noise1(glm::detail::tvec2(x, T(0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(T const & x) + { + return glm::detail::tvec2( + noise1(x + T(0.0)), + noise1(x + T(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(T const & x) + { + return glm::detail::tvec3( + noise1(x - T(1.0)), + noise1(x + T(0.0)), + noise1(x + T(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(T const & x) + { + return glm::detail::tvec4( + noise1(x - T(1.0)), + noise1(x + T(0.0)), + noise1(x + T(1.0)), + noise1(x + T(2.0))); + } + + template + GLM_FUNC_QUALIFIER T noise1(glm::detail::tvec2 const & v) + { + detail::tvec4 const C = detail::tvec4( + T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 + T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) + T(-0.577350269189626), // -1.0 + 2.0 * C.x + T( 0.024390243902439)); // 1.0 / 41.0 + + // First corner + detail::tvec2 i = floor(v + dot(v, detail::tvec2(C[1]))); + detail::tvec2 x0 = v - i + dot(i, detail::tvec2(C[0])); + + // Other corners + //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 + //i1.y = 1.0 - i1.x; + detail::tvec2 i1 = (x0.x > x0.y) ? detail::tvec2(1, 0) : detail::tvec2(0, 1); + // x0 = x0 - 0.0 + 0.0 * C.xx ; + // x1 = x0 - i1 + 1.0 * C.xx ; + // x2 = x0 - 1.0 + 2.0 * C.xx ; + detail::tvec4 x12 = detail::tvec4(x0.x, x0.y, x0.x, x0.y) + detail::tvec4(C.x, C.x, C.z, C.z); + x12 = detail::tvec4(detail::tvec2(x12) - i1, x12.z, x12.w); + + // Permutations + i = mod(i, T(289)); // Avoid truncation effects in permutation + detail::tvec3 p = permute( + permute(i.y + detail::tvec3(T(0), i1.y, T(1))) + + i.x + detail::tvec3(T(0), i1.x, T(1))); + + detail::tvec3 m = max(T(0.5) - detail::tvec3( + dot(x0, x0), + dot(detail::tvec2(x12.x, x12.y), detail::tvec2(x12.x, x12.y)), + dot(detail::tvec2(x12.z, x12.w), detail::tvec2(x12.z, x12.w))), T(0)); + m = m * m ; + m = m * m ; + + // Gradients: 41 points uniformly over a line, mapped onto a diamond. + // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) + + detail::tvec3 x = T(2) * fract(p * C.w) - T(1); + detail::tvec3 h = abs(x) - T(0.5); + detail::tvec3 ox = floor(x + T(0.5)); + detail::tvec3 a0 = x - ox; + + // Normalise gradients implicitly by scaling m + // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); + m *= T(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); + + // Compute final noise value at P + detail::tvec3 g; + g.x = a0.x * x0.x + h.x * x0.y; + //g.yz = a0.yz * x12.xz + h.yz * x12.yw; + g.y = a0.y * x12.x + h.y * x12.y; + g.z = a0.z * x12.z + h.z * x12.w; + return T(130) * dot(m, g); + } + + template + GLM_FUNC_QUALIFIER T noise1(detail::tvec3 const & v) + { + detail::tvec2 const C(1.0 / 6.0, 1.0 / 3.0); + detail::tvec4 const D(0.0, 0.5, 1.0, 2.0); + + // First corner + detail::tvec3 i(floor(v + dot(v, detail::tvec3(C.y)))); + detail::tvec3 x0(v - i + dot(i, detail::tvec3(C.x))); + + // Other corners + detail::tvec3 g(step(detail::tvec3(x0.y, x0.z, x0.x), x0)); + detail::tvec3 l(T(1) - g); + detail::tvec3 i1(min(g, detail::tvec3(l.z, l.x, l.y))); + detail::tvec3 i2(max(g, detail::tvec3(l.z, l.x, l.y))); + + // x0 = x0 - 0.0 + 0.0 * C.xxx; + // x1 = x0 - i1 + 1.0 * C.xxx; + // x2 = x0 - i2 + 2.0 * C.xxx; + // x3 = x0 - 1.0 + 3.0 * C.xxx; + detail::tvec3 x1(x0 - i1 + C.x); + detail::tvec3 x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y + detail::tvec3 x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y + + // Permutations + i = mod289(i); + detail::tvec4 p(permute(permute(permute( + i.z + detail::tvec4(T(0), i1.z, i2.z, T(1))) + + i.y + detail::tvec4(T(0), i1.y, i2.y, T(1))) + + i.x + detail::tvec4(T(0), i1.x, i2.x, T(1)))); + + // Gradients: 7x7 points over a square, mapped onto an octahedron. + // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) + T n_ = T(0.142857142857); // 1.0/7.0 + detail::tvec3 ns(n_ * detail::tvec3(D.w, D.y, D.z) - detail::tvec3(D.x, D.z, D.x)); + + detail::tvec4 j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) + + detail::tvec4 x_(floor(j * ns.z)); + detail::tvec4 y_(floor(j - T(7) * x_)); // mod(j,N) + + detail::tvec4 x(x_ * ns.x + ns.y); + detail::tvec4 y(y_ * ns.x + ns.y); + detail::tvec4 h(T(1) - abs(x) - abs(y)); + + detail::tvec4 b0(x.x, x.y, y.x, y.y); + detail::tvec4 b1(x.z, x.w, y.z, y.w); + + // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; + // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; + detail::tvec4 s0(floor(b0) * T(2) + T(1)); + detail::tvec4 s1(floor(b1) * T(2) + T(1)); + detail::tvec4 sh(-step(h, detail::tvec4(0.0))); + + detail::tvec4 a0 = detail::tvec4(b0.x, b0.z, b0.y, b0.w) + detail::tvec4(s0.x, s0.z, s0.y, s0.w) * detail::tvec4(sh.x, sh.x, sh.y, sh.y); + detail::tvec4 a1 = detail::tvec4(b1.x, b1.z, b1.y, b1.w) + detail::tvec4(s1.x, s1.z, s1.y, s1.w) * detail::tvec4(sh.z, sh.z, sh.w, sh.w); + + detail::tvec3 p0(a0.x, a0.y, h.x); + detail::tvec3 p1(a0.z, a0.w, h.y); + detail::tvec3 p2(a1.x, a1.y, h.z); + detail::tvec3 p3(a1.z, a1.w, h.w); + + // Normalise gradients + detail::tvec4 norm = taylorInvSqrt(detail::tvec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + // Mix final noise value + detail::tvec4 m = max(T(0.6) - detail::tvec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), T(0)); + m = m * m; + return T(42) * dot(m * m, detail::tvec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); + } + + template + GLM_FUNC_QUALIFIER T noise1(detail::tvec4 const & v) + { + detail::tvec4 const C( + 0.138196601125011, // (5 - sqrt(5))/20 G4 + 0.276393202250021, // 2 * G4 + 0.414589803375032, // 3 * G4 + -0.447213595499958); // -1 + 4 * G4 + + // (sqrt(5) - 1)/4 = F4, used once below + T const F4 = T(0.309016994374947451); + + // First corner + detail::tvec4 i = floor(v + dot(v, vec4(F4))); + detail::tvec4 x0 = v - i + dot(i, vec4(C.x)); + + // Other corners + + // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) + detail::tvec4 i0; + detail::tvec3 isX = step(detail::tvec3(x0.y, x0.z, x0.w), detail::tvec3(x0.x)); + detail::tvec3 isYZ = step(detail::tvec3(x0.z, x0.w, x0.w), detail::tvec3(x0.y, x0.y, x0.z)); + // i0.x = dot(isX, vec3(1.0)); + //i0.x = isX.x + isX.y + isX.z; + //i0.yzw = T(1) - isX; + i0 = detail::tvec4(isX.x + isX.y + isX.z, T(1) - isX); + // i0.y += dot(isYZ.xy, vec2(1.0)); + i0.y += isYZ.x + isYZ.y; + //i0.zw += 1.0 - detail::tvec2(isYZ.x, isYZ.y); + i0.z += T(1) - isYZ.x; + i0.w += T(1) - isYZ.y; + i0.z += isYZ.z; + i0.w += T(1) - isYZ.z; + + // i0 now contains the unique values 0,1,2,3 in each channel + detail::tvec4 i3 = clamp(i0, 0.0, 1.0); + detail::tvec4 i2 = clamp(i0 - 1.0, 0.0, 1.0); + detail::tvec4 i1 = clamp(i0 - 2.0, 0.0, 1.0); + + // x0 = x0 - 0.0 + 0.0 * C.xxxx + // x1 = x0 - i1 + 0.0 * C.xxxx + // x2 = x0 - i2 + 0.0 * C.xxxx + // x3 = x0 - i3 + 0.0 * C.xxxx + // x4 = x0 - 1.0 + 4.0 * C.xxxx + detail::tvec4 x1 = x0 - i1 + C.x; + detail::tvec4 x2 = x0 - i2 + C.y; + detail::tvec4 x3 = x0 - i3 + C.z; + detail::tvec4 x4 = x0 + C.w; + + // Permutations + i = mod(i, T(289)); + T j0 = permute(permute(permute(permute(i.w) + i.z) + i.y) + i.x); + detail::tvec4 j1 = permute(permute(permute(permute( + i.w + detail::tvec4(i1.w, i2.w, i3.w, T(1))) + + i.z + detail::tvec4(i1.z, i2.z, i3.z, T(1))) + + i.y + detail::tvec4(i1.y, i2.y, i3.y, T(1))) + + i.x + detail::tvec4(i1.x, i2.x, i3.x, T(1))); + + // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope + // 7*7*6 = 294, which is close to the ring size 17*17 = 289. + detail::tvec4 ip = detail::tvec4(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); + + detail::tvec4 p0 = grad4(j0, ip); + detail::tvec4 p1 = grad4(j1.x, ip); + detail::tvec4 p2 = grad4(j1.y, ip); + detail::tvec4 p3 = grad4(j1.z, ip); + detail::tvec4 p4 = grad4(j1.w, ip); + + // Normalise gradients + detail::tvec4 norm = taylorInvSqrt(detail::tvec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + p4 *= taylorInvSqrt(dot(p4, p4)); + + // Mix contributions from the five corners + detail::tvec3 m0 = max(T(0.6) - detail::tvec3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), T(0)); + detail::tvec2 m1 = max(T(0.6) - detail::tvec2(dot(x3, x3), dot(x4, x4) ), T(0)); + m0 = m0 * m0; + m1 = m1 * m1; + return T(49) * + (dot(m0 * m0, detail::tvec3(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + + dot(m1 * m1, detail::tvec2(dot(p3, x3), dot(p4, x4)))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec2 const & x) + { + return glm::detail::tvec2( + noise1(x + glm::detail::tvec2(0.0)), + noise1(glm::detail::tvec2(0.0) - x)); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec3 const & x) + { + return glm::detail::tvec2( + noise1(x + glm::detail::tvec3(0.0)), + noise1(glm::detail::tvec3(0.0) - x)); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec4 const & x) + { + return glm::detail::tvec2( + noise1(x + glm::detail::tvec4(0.0)), + noise1(glm::detail::tvec4(0.0) - x)); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec2 const & x) + { + return glm::detail::tvec3( + noise1(x - glm::detail::tvec2(1.0)), + noise1(x + glm::detail::tvec2(0.0)), + noise1(x + glm::detail::tvec2(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec3 const & x) + { + return glm::detail::tvec3( + noise1(x - glm::detail::tvec3(1.0)), + noise1(x + glm::detail::tvec3(0.0)), + noise1(x + glm::detail::tvec3(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec4 const & x) + { + return glm::detail::tvec3( + noise1(x - glm::detail::tvec4(1.0)), + noise1(x + glm::detail::tvec4(0.0)), + noise1(x + glm::detail::tvec4(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec2 const & x) + { + return glm::detail::tvec4( + noise1(x - glm::detail::tvec2(1.0)), + noise1(x + glm::detail::tvec2(0.0)), + noise1(x + glm::detail::tvec2(1.0)), + noise1(x + glm::detail::tvec2(2.0))); + } + + + template + GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec3 const & x) + { + return glm::detail::tvec4( + noise1(x - glm::detail::tvec3(1.0)), + noise1(x + glm::detail::tvec3(0.0)), + noise1(x + glm::detail::tvec3(1.0)), + noise1(x + glm::detail::tvec3(2.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec4 const & x) + { + return glm::detail::tvec4( + noise1(x - glm::detail::tvec4(1.0)), + noise1(x + glm::detail::tvec4(0.0)), + noise1(x + glm::detail::tvec4(1.0)), + noise1(x + glm::detail::tvec4(2.0))); + } + +}//namespace glm diff --git a/Glm/core/func_packing.hpp b/Glm/core/func_packing.hpp new file mode 100644 index 0000000..e637ae3 --- /dev/null +++ b/Glm/core/func_packing.hpp @@ -0,0 +1,193 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_packing.hpp +/// @date 2010-03-17 / 2011-06-15 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions +/// +/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions +/// @ingroup core +/// +/// These functions do not operate component-wise, rather as described in each case. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_packing +#define GLM_CORE_func_packing GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_packing + /// @{ + + //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. + //! Then, the results are packed into the returned 32-bit unsigned integer. + //! + //! The conversion for component c of v to fixed point is done as follows: + //! packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) + //! + //! The first component of the vector will be written to the least significant bits of the output; + //! the last component will be written to the most significant bits. + //! + /// @see GLSL packUnorm2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::uint32 packUnorm2x16(detail::tvec2 const & v); + + //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. + //! Then, the results are packed into the returned 32-bit unsigned integer. + //! + //! The conversion for component c of v to fixed point is done as follows: + //! packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) + //! + //! The first component of the vector will be written to the least significant bits of the output; + //! the last component will be written to the most significant bits. + //! + /// @see GLSL packSnorm2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::uint32 packSnorm2x16(detail::tvec2 const & v); + + //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. + //! Then, the results are packed into the returned 32-bit unsigned integer. + //! + //! The conversion for component c of v to fixed point is done as follows: + //! packUnorm4x8: round(clamp(c, 0, +1) * 255.0) + //! + //! The first component of the vector will be written to the least significant bits of the output; + //! the last component will be written to the most significant bits. + //! + /// @see GLSL packUnorm4x8 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::uint32 packUnorm4x8(detail::tvec4 const & v); + + //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. + //! Then, the results are packed into the returned 32-bit unsigned integer. + //! + //! The conversion for component c of v to fixed point is done as follows: + //! packSnorm4x8: round(clamp(c, -1, +1) * 127.0) + //! + //! The first component of the vector will be written to the least significant bits of the output; + //! the last component will be written to the most significant bits. + //! + /// @see GLSL packSnorm4x8 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::uint32 packSnorm4x8(detail::tvec4 const & v); + + //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. + //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. + //! + //! The conversion for unpacked fixed-point value f to floating point is done as follows: + //! unpackUnorm2x16: f / 65535.0 + //! + //! The first component of the returned vector will be extracted from the least significant bits of the input; + //! the last component will be extracted from the most significant bits. + //! + /// @see GLSL unpackUnorm2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec2 unpackUnorm2x16(detail::uint32 const & p); + + //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. + //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. + //! + //! The conversion for unpacked fixed-point value f to floating point is done as follows: + //! unpackSnorm2x16: clamp(f / 32767.0, -1, +1) + //! + //! The first component of the returned vector will be extracted from the least significant bits of the input; + //! the last component will be extracted from the most significant bits. + //! + /// @see GLSL unpackSnorm2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec2 unpackSnorm2x16(detail::uint32 const & p); + + /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. + /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. + /// + /// The conversion for unpacked fixed-point value f to floating point is done as follows: + /// unpackUnorm4x8: f / 255.0 + /// + /// The first component of the returned vector will be extracted from the least significant bits of the input; + /// the last component will be extracted from the most significant bits. + /// + /// @see GLSL unpackUnorm4x8 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec4 unpackUnorm4x8(detail::uint32 const & p); + + /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. + /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. + /// + /// The conversion for unpacked fixed-point value f to floating point is done as follows: + /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) + /// + /// The first component of the returned vector will be extracted from the least significant bits of the input; + /// the last component will be extracted from the most significant bits. + /// + /// @see GLSL unpackSnorm4x8 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec4 unpackSnorm4x8(detail::uint32 const & p); + + /// Returns a double-precision value obtained by packing the components of v into a 64-bit value. + /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. + /// Otherwise, the bit- level representation of v is preserved. + /// The first vector component specifies the 32 least significant bits; + /// the second component specifies the 32 most significant bits. + /// + /// @see GLSL packDouble2x32 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL double packDouble2x32(detail::tvec2 const & v); + + /// Returns a two-component unsigned integer vector representation of v. + /// The bit-level representation of v is preserved. + /// The first component of the vector contains the 32 least significant bits of the double; + /// the second component consists the 32 most significant bits. + /// + /// @see GLSL unpackDouble2x32 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec2 unpackDouble2x32(double const & v); + + /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector + /// to the 16-bit floating-point representation found in the OpenGL Specification, + /// and then packing these two 16- bit integers into a 32-bit unsigned integer. + /// The first vector component specifies the 16 least-significant bits of the result; + /// the second component specifies the 16 most-significant bits. + /// + /// @see GLSL packHalf2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL uint packHalf2x16(vec2 const & v); + + /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, + /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, + /// and converting them to 32-bit floating-point values. + /// The first component of the vector is obtained from the 16 least-significant bits of v; + /// the second component is obtained from the 16 most-significant bits of v. + /// + /// @see GLSL unpackHalf2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL vec2 unpackHalf2x16(uint const & v); + + /// @} +}//namespace glm + +#include "func_packing.inl" + +#endif//GLM_CORE_func_packing + diff --git a/Glm/core/func_packing.inl b/Glm/core/func_packing.inl new file mode 100644 index 0000000..21d64ab --- /dev/null +++ b/Glm/core/func_packing.inl @@ -0,0 +1,208 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_packing.inl +/// @date 2010-03-17 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + GLM_FUNC_QUALIFIER detail::uint32 packUnorm2x16(detail::tvec2 const & v) + { + detail::uint16 A(detail::uint16(round(clamp(v.x, 0.0f, 1.0f) * 65535.0f))); + detail::uint16 B(detail::uint16(round(clamp(v.y, 0.0f, 1.0f) * 65535.0f))); + return detail::uint32((B << 16) | A); + } + + GLM_FUNC_QUALIFIER detail::tvec2 unpackUnorm2x16(detail::uint32 const & p) + { + detail::uint32 Mask16((1 << 16) - 1); + detail::uint32 A((p >> 0) & Mask16); + detail::uint32 B((p >> 16) & Mask16); + return detail::tvec2( + A * 1.0f / 65535.0f, + B * 1.0f / 65535.0f); + } + + GLM_FUNC_QUALIFIER detail::uint32 packSnorm2x16(detail::tvec2 const & v) + { + union iu + { + detail::int16 i; + detail::uint16 u; + } A, B; + + detail::tvec2 Unpack = clamp(v ,-1.0f, 1.0f) * 32767.0f; + A.i = detail::int16(round(Unpack.x)); + B.i = detail::int16(round(Unpack.y)); + detail::uint32 Pack = (detail::uint32(B.u) << 16) | (detail::uint32(A.u) << 0); + return Pack; + } + + GLM_FUNC_QUALIFIER detail::tvec2 unpackSnorm2x16(detail::uint32 const & p) + { + union iu + { + detail::int16 i; + detail::uint16 u; + } A, B; + + detail::uint32 Mask16((1 << 16) - 1); + A.u = detail::uint16((p >> 0) & Mask16); + B.u = detail::uint16((p >> 16) & Mask16); + detail::tvec2 Pack(A.i, B.i); + + return clamp(Pack * 1.0f / 32767.0f, -1.0f, 1.0f); + } + + GLM_FUNC_QUALIFIER detail::uint32 packUnorm4x8(detail::tvec4 const & v) + { + detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f)); + detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f)); + detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f)); + detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f)); + return detail::uint32((D << 24) | (C << 16) | (B << 8) | A); + } + + GLM_FUNC_QUALIFIER detail::tvec4 unpackUnorm4x8(detail::uint32 const & p) + { + detail::uint32 Mask8((1 << 8) - 1); + detail::uint32 A((p >> 0) & Mask8); + detail::uint32 B((p >> 8) & Mask8); + detail::uint32 C((p >> 16) & Mask8); + detail::uint32 D((p >> 24) & Mask8); + return detail::tvec4( + A * 1.0f / 255.0f, + B * 1.0f / 255.0f, + C * 1.0f / 255.0f, + D * 1.0f / 255.0f); + } + + GLM_FUNC_QUALIFIER detail::uint32 packSnorm4x8(detail::tvec4 const & v) + { + union iu + { + detail::int8 i; + detail::uint8 u; + } A, B, C, D; + + detail::tvec4 Unpack = clamp(v ,-1.0f, 1.0f) * 127.0f; + A.i = detail::int8(round(Unpack.x)); + B.i = detail::int8(round(Unpack.y)); + C.i = detail::int8(round(Unpack.z)); + D.i = detail::int8(round(Unpack.w)); + detail::uint32 Pack = (detail::uint32(D.u) << 24) | (detail::uint32(C.u) << 16) | (detail::uint32(B.u) << 8) | (detail::uint32(A.u) << 0); + return Pack; + } + + GLM_FUNC_QUALIFIER detail::tvec4 unpackSnorm4x8(detail::uint32 const & p) + { + union iu + { + detail::int8 i; + detail::uint8 u; + } A, B, C, D; + + detail::uint32 Mask8((1 << 8) - 1); + A.u = detail::uint8((p >> 0) & Mask8); + B.u = detail::uint8((p >> 8) & Mask8); + C.u = detail::uint8((p >> 16) & Mask8); + D.u = detail::uint8((p >> 24) & Mask8); + detail::tvec4 Pack(A.i, B.i, C.i, D.i); + + return clamp(Pack * 1.0f / 127.0f, -1.0f, 1.0f); + } + + GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2 const & v) + { + struct uint32_pair + { + detail::uint32 x; + detail::uint32 y; + }; + + union helper + { + uint32_pair input; + double output; + } Helper; + + Helper.input.x = v.x; + Helper.input.y = v.y; + + return Helper.output; + //return *(double*)&v; + } + + GLM_FUNC_QUALIFIER detail::tvec2 unpackDouble2x32(double const & v) + { + struct uint32_pair + { + detail::uint32 x; + detail::uint32 y; + }; + + union helper + { + double input; + uint32_pair output; + } Helper; + + Helper.input = v; + + return detail::tvec2(Helper.output.x, Helper.output.y); + } + + GLM_FUNC_QUALIFIER uint packHalf2x16(detail::tvec2 const & v) + { + union helper + { + uint other; + struct + { + detail::hdata a, b; + } orig; + } Pack; + + Pack.orig.a = detail::toFloat16(v.x); + Pack.orig.b = detail::toFloat16(v.y); + return Pack.other; + } + + GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint const & v) + { + union helper + { + uint other; + struct + { + detail::hdata a, b; + } orig; + } Unpack; + Unpack.other = v; + + return vec2(detail::toFloat32(Unpack.orig.a), detail::toFloat32(Unpack.orig.b)); + } +}//namespace glm + diff --git a/Glm/core/func_trigonometric.hpp b/Glm/core/func_trigonometric.hpp new file mode 100644 index 0000000..72b0998 --- /dev/null +++ b/Glm/core/func_trigonometric.hpp @@ -0,0 +1,203 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_trigonometric.hpp +/// @date 2008-08-01 / 2011-06-15 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions +/// +/// @defgroup core_func_trigonometric Angle and Trigonometry Functions +/// @ingroup core +/// +/// Function parameters specified as angle are assumed to be in units of radians. +/// In no case will any of these functions result in a divide by zero error. If +/// the divisor of a ratio is 0, then results will be undefined. +/// +/// These all operate component-wise. The description is per component. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_trigonometric +#define GLM_CORE_func_trigonometric GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_trigonometric + /// @{ + + /// Converts degrees to radians and returns the result. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL radians man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType radians(genType const & degrees); + + /// Converts radians to degrees and returns the result. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL degrees man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType degrees(genType const & radians); + + /// The standard trigonometric sine function. + /// The values returned by this function will range from [-1, 1]. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL sin man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType sin(genType const & angle); + + /// The standard trigonometric cosine function. + /// The values returned by this function will range from [-1, 1]. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL cos man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType cos(genType const & angle); + + /// The standard trigonometric tangent function. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL tan man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType tan(genType const & angle); + + /// Arc sine. Returns an angle whose sine is x. + /// The range of values returned by this function is [-PI/2, PI/2]. + /// Results are undefined if |x| > 1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL asin man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType asin(genType const & x); + + /// Arc cosine. Returns an angle whose sine is x. + /// The range of values returned by this function is [0, PI]. + /// Results are undefined if |x| > 1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL acos man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType acos(genType const & x); + + /// Arc tangent. Returns an angle whose tangent is y/x. + /// The signs of x and y are used to determine what + /// quadrant the angle is in. The range of values returned + /// by this function is [-PI, PI]. Results are undefined + /// if x and y are both 0. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL atan man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType atan(genType const & y, genType const & x); + + /// Arc tangent. Returns an angle whose tangent is y_over_x. + /// The range of values returned by this function is [-PI/2, PI/2]. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL atan man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType atan(genType const & y_over_x); + + /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL sinh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType sinh(genType const & angle); + + /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL cosh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType cosh(genType const & angle); + + /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL tanh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType tanh(genType const & angle); + + /// Arc hyperbolic sine; returns the inverse of sinh. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL asinh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType asinh(genType const & x); + + /// Arc hyperbolic cosine; returns the non-negative inverse + /// of cosh. Results are undefined if x < 1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL acosh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType acosh(genType const & x); + + /// Arc hyperbolic tangent; returns the inverse of tanh. + /// Results are undefined if abs(x) >= 1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL atanh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType atanh(genType const & x); + + /// @} +}//namespace glm + +#include "func_trigonometric.inl" + +#endif//GLM_CORE_func_trigonometric + + diff --git a/Glm/core/func_trigonometric.inl b/Glm/core/func_trigonometric.inl new file mode 100644 index 0000000..8390209 --- /dev/null +++ b/Glm/core/func_trigonometric.inl @@ -0,0 +1,244 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_trigonometric.inl +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + // radians + template + GLM_FUNC_QUALIFIER genType radians + ( + genType const & degrees + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'radians' only accept floating-point input"); + + genType const pi = genType(3.1415926535897932384626433832795); + return degrees * (pi / genType(180)); + } + + VECTORIZE_VEC(radians) + + // degrees + template + GLM_FUNC_QUALIFIER genType degrees + ( + genType const & radians + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'degrees' only accept floating-point input"); + + const genType pi = genType(3.1415926535897932384626433832795); + return radians * (genType(180) / pi); + } + + VECTORIZE_VEC(degrees) + + // sin + template + GLM_FUNC_QUALIFIER genType sin + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'sin' only accept floating-point input"); + + return genType(::std::sin(angle)); + } + + VECTORIZE_VEC(sin) + + // cos + template + GLM_FUNC_QUALIFIER genType cos(genType const & angle) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'cos' only accept floating-point input"); + + return genType(::std::cos(angle)); + } + + VECTORIZE_VEC(cos) + + // tan + template + GLM_FUNC_QUALIFIER genType tan + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'tan' only accept floating-point input"); + + return genType(::std::tan(angle)); + } + + VECTORIZE_VEC(tan) + + // asin + template + GLM_FUNC_QUALIFIER genType asin + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'asin' only accept floating-point input"); + + return genType(::std::asin(x)); + } + + VECTORIZE_VEC(asin) + + // acos + template + GLM_FUNC_QUALIFIER genType acos + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'acos' only accept floating-point input"); + + return genType(::std::acos(x)); + } + + VECTORIZE_VEC(acos) + + // atan + template + GLM_FUNC_QUALIFIER genType atan + ( + genType const & y, + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); + + return genType(::std::atan2(y, x)); + } + + VECTORIZE_VEC_VEC(atan) + + template + GLM_FUNC_QUALIFIER genType atan + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); + + return genType(::std::atan(x)); + } + + VECTORIZE_VEC(atan) + + // sinh + template + GLM_FUNC_QUALIFIER genType sinh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'sinh' only accept floating-point input"); + + return genType(std::sinh(angle)); + } + + VECTORIZE_VEC(sinh) + + // cosh + template + GLM_FUNC_QUALIFIER genType cosh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'cosh' only accept floating-point input"); + + return genType(std::cosh(angle)); + } + + VECTORIZE_VEC(cosh) + + // tanh + template + GLM_FUNC_QUALIFIER genType tanh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'tanh' only accept floating-point input"); + + return genType(std::tanh(angle)); + } + + VECTORIZE_VEC(tanh) + + // asinh + template + GLM_FUNC_QUALIFIER genType asinh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'asinh' only accept floating-point input"); + + return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x)); + } + + VECTORIZE_VEC(asinh) + + // acosh + template + GLM_FUNC_QUALIFIER genType acosh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'acosh' only accept floating-point input"); + + if(x < genType(1)) + return genType(0); + return log(x + sqrt(x * x - genType(1))); + } + + VECTORIZE_VEC(acosh) + + // atanh + template + GLM_FUNC_QUALIFIER genType atanh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atanh' only accept floating-point input"); + + if(abs(x) >= genType(1)) + return 0; + return genType(0.5) * log((genType(1) + x) / (genType(1) - x)); + } + + VECTORIZE_VEC(atanh) + +}//namespace glm diff --git a/Glm/core/func_vector_relational.hpp b/Glm/core/func_vector_relational.hpp new file mode 100644 index 0000000..202acb3 --- /dev/null +++ b/Glm/core/func_vector_relational.hpp @@ -0,0 +1,138 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_vector_relational.hpp +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions +/// +/// @defgroup core_func_vector_relational Vector Relational Functions +/// @ingroup core +/// +/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to +/// operate on scalars and produce scalar Boolean results. For vector results, +/// use the following built-in functions. +/// +/// In all cases, the sizes of all the input and return vectors for any particular +/// call must match. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_vector_relational +#define GLM_CORE_func_vector_relational GLM_VERSION + +#include "_detail.hpp" + +namespace glm +{ + /// @addtogroup core_func_vector_relational + /// @{ + + /// Returns the component-wise comparison result of x < y. + /// + /// @tparam vecType Floating-point or integer vector types. + /// + /// @see GLSL lessThan man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type lessThan(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x <= y. + /// + /// @tparam vecType Floating-point or integer vector types. + /// + /// @see GLSL lessThanEqual man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x > y. + /// + /// @tparam vecType Floating-point or integer vector types. + /// + /// @see GLSL greaterThan man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type greaterThan(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x >= y. + /// + /// @tparam vecType Floating-point or integer vector types. + /// + /// @see GLSL greaterThanEqual man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x == y. + /// + /// @tparam vecType Floating-point, integer or boolean vector types. + /// + /// @see GLSL equal man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type equal(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x != y. + /// + /// @tparam vecType Floating-point, integer or boolean vector types. + /// + /// @see GLSL notEqual man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type notEqual(vecType const & x, vecType const & y); + + /// Returns true if any component of x is true. + /// + /// @tparam vecType Boolean vector types. + /// + /// @see GLSL any man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template