Revision: 76234 http://sourceforge.net/p/brlcad/code/76234 Author: starseeker Date: 2020-06-29 13:53:57 +0000 (Mon, 29 Jun 2020) Log Message: ----------- Add work by Sadeep Darshana on enabling a display manager in the Qt based qged interface
Modified Paths: -------------- brlcad/trunk/src/qged/CMakeLists.txt brlcad/trunk/src/qged/cadapp.cpp brlcad/trunk/src/qged/main_window.cpp brlcad/trunk/src/qged/main_window.h Added Paths: ----------- brlcad/trunk/src/qged/display/ brlcad/trunk/src/qged/display/AxesRenderer.cpp brlcad/trunk/src/qged/display/AxesRenderer.h brlcad/trunk/src/qged/display/Camera.h brlcad/trunk/src/qged/display/Display.cpp brlcad/trunk/src/qged/display/Display.h brlcad/trunk/src/qged/display/DisplayManager.cpp brlcad/trunk/src/qged/display/DisplayManager.h brlcad/trunk/src/qged/display/GeometryRenderer.cpp brlcad/trunk/src/qged/display/GeometryRenderer.h brlcad/trunk/src/qged/display/OrthographicCamera.cpp brlcad/trunk/src/qged/display/OrthographicCamera.h brlcad/trunk/src/qged/display/README.txt brlcad/trunk/src/qged/display/Renderable.h brlcad/trunk/src/qged/display/glm/ brlcad/trunk/src/qged/display/glm/CMakeLists.txt brlcad/trunk/src/qged/display/glm/cmake/ brlcad/trunk/src/qged/display/glm/cmake/glm/ brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig-version.cmake brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig.cmake brlcad/trunk/src/qged/display/glm/copying.txt brlcad/trunk/src/qged/display/glm/glm/ brlcad/trunk/src/qged/display/glm/glm/CMakeLists.txt brlcad/trunk/src/qged/display/glm/glm/common.hpp brlcad/trunk/src/qged/display/glm/glm/detail/ brlcad/trunk/src/qged/display/glm/glm/detail/_features.hpp brlcad/trunk/src/qged/display/glm/glm/detail/_fixes.hpp brlcad/trunk/src/qged/display/glm/glm/detail/_noise.hpp brlcad/trunk/src/qged/display/glm/glm/detail/_swizzle.hpp brlcad/trunk/src/qged/display/glm/glm/detail/_swizzle_func.hpp brlcad/trunk/src/qged/display/glm/glm/detail/_vectorize.hpp brlcad/trunk/src/qged/display/glm/glm/detail/compute_common.hpp brlcad/trunk/src/qged/display/glm/glm/detail/compute_vector_relational.hpp brlcad/trunk/src/qged/display/glm/glm/detail/func_common.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_common_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_exponential.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_exponential_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_geometric.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_geometric_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_integer.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_integer_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_matrix.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_matrix_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_packing.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_packing_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_trigonometric.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_trigonometric_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_vector_relational.inl brlcad/trunk/src/qged/display/glm/glm/detail/func_vector_relational_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/glm.cpp brlcad/trunk/src/qged/display/glm/glm/detail/qualifier.hpp brlcad/trunk/src/qged/display/glm/glm/detail/setup.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_float.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_half.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_half.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat2x2.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat2x2.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat2x3.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat2x3.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat2x4.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat2x4.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat3x2.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat3x2.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat3x3.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat3x3.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat3x4.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat3x4.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat4x2.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat4x2.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat4x3.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat4x3.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat4x4.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_mat4x4.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_mat4x4_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_quat.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_quat.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_quat_simd.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_vec1.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_vec1.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_vec2.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_vec2.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_vec3.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_vec3.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_vec4.hpp brlcad/trunk/src/qged/display/glm/glm/detail/type_vec4.inl brlcad/trunk/src/qged/display/glm/glm/detail/type_vec4_simd.inl brlcad/trunk/src/qged/display/glm/glm/exponential.hpp brlcad/trunk/src/qged/display/glm/glm/ext/ brlcad/trunk/src/qged/display/glm/glm/ext/matrix_clip_space.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_clip_space.inl brlcad/trunk/src/qged/display/glm/glm/ext/matrix_common.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_common.inl brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double2x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double2x2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double2x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double2x3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double2x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double2x4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double3x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double3x2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double3x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double3x3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double3x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double3x4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double4x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double4x2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double4x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double4x3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double4x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_double4x4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float2x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float2x2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float2x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float2x3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float2x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float2x4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float3x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float3x2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float3x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float3x3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float3x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float3x4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float4x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float4x2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float4x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float4x3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float4x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_float4x4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int2x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int2x2_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int2x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int2x3_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int2x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int2x4_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int3x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int3x2_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int3x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int3x3_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int3x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int3x4_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int4x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int4x2_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int4x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int4x3_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int4x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_int4x4_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_projection.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_projection.inl brlcad/trunk/src/qged/display/glm/glm/ext/matrix_relational.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_relational.inl brlcad/trunk/src/qged/display/glm/glm/ext/matrix_transform.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_transform.inl brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint2x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint2x2_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint2x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint2x3_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint2x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint2x4_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint3x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint3x2_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint3x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint3x3_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint3x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint3x4_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint4x2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint4x2_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint4x3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint4x3_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint4x4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/matrix_uint4x4_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_common.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_common.inl brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_common_simd.inl brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_double.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_double_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_exponential.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_exponential.inl brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_float.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_float_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_geometric.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_geometric.inl brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_relational.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_relational.inl brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_transform.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_transform.inl brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_trigonometric.hpp brlcad/trunk/src/qged/display/glm/glm/ext/quaternion_trigonometric.inl brlcad/trunk/src/qged/display/glm/glm/ext/scalar_common.hpp brlcad/trunk/src/qged/display/glm/glm/ext/scalar_common.inl brlcad/trunk/src/qged/display/glm/glm/ext/scalar_constants.hpp brlcad/trunk/src/qged/display/glm/glm/ext/scalar_constants.inl brlcad/trunk/src/qged/display/glm/glm/ext/scalar_int_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/scalar_integer.hpp brlcad/trunk/src/qged/display/glm/glm/ext/scalar_integer.inl brlcad/trunk/src/qged/display/glm/glm/ext/scalar_packing.hpp brlcad/trunk/src/qged/display/glm/glm/ext/scalar_packing.inl brlcad/trunk/src/qged/display/glm/glm/ext/scalar_relational.hpp brlcad/trunk/src/qged/display/glm/glm/ext/scalar_relational.inl brlcad/trunk/src/qged/display/glm/glm/ext/scalar_uint_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/scalar_ulp.hpp brlcad/trunk/src/qged/display/glm/glm/ext/scalar_ulp.inl brlcad/trunk/src/qged/display/glm/glm/ext/vector_bool1.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_bool1_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_bool2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_bool2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_bool3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_bool3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_bool4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_bool4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_common.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_common.inl brlcad/trunk/src/qged/display/glm/glm/ext/vector_double1.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_double1_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_double2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_double2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_double3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_double3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_double4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_double4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_float1.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_float1_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_float2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_float2_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_float3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_float3_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_float4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_float4_precision.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_int1.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_int1_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_int2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_int2_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_int3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_int3_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_int4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_int4_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_integer.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_integer.inl brlcad/trunk/src/qged/display/glm/glm/ext/vector_packing.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_packing.inl brlcad/trunk/src/qged/display/glm/glm/ext/vector_relational.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_relational.inl brlcad/trunk/src/qged/display/glm/glm/ext/vector_uint1.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_uint1_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_uint2.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_uint2_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_uint3.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_uint3_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_uint4.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_uint4_sized.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_ulp.hpp brlcad/trunk/src/qged/display/glm/glm/ext/vector_ulp.inl brlcad/trunk/src/qged/display/glm/glm/ext.hpp brlcad/trunk/src/qged/display/glm/glm/fwd.hpp brlcad/trunk/src/qged/display/glm/glm/geometric.hpp brlcad/trunk/src/qged/display/glm/glm/glm.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/ brlcad/trunk/src/qged/display/glm/glm/gtc/bitfield.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/bitfield.inl brlcad/trunk/src/qged/display/glm/glm/gtc/color_space.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/color_space.inl brlcad/trunk/src/qged/display/glm/glm/gtc/constants.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/constants.inl brlcad/trunk/src/qged/display/glm/glm/gtc/epsilon.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/epsilon.inl brlcad/trunk/src/qged/display/glm/glm/gtc/integer.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/integer.inl brlcad/trunk/src/qged/display/glm/glm/gtc/matrix_access.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/matrix_access.inl brlcad/trunk/src/qged/display/glm/glm/gtc/matrix_integer.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/matrix_inverse.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/matrix_inverse.inl brlcad/trunk/src/qged/display/glm/glm/gtc/matrix_transform.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/matrix_transform.inl brlcad/trunk/src/qged/display/glm/glm/gtc/noise.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/noise.inl brlcad/trunk/src/qged/display/glm/glm/gtc/packing.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/packing.inl brlcad/trunk/src/qged/display/glm/glm/gtc/quaternion.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/quaternion.inl brlcad/trunk/src/qged/display/glm/glm/gtc/quaternion_simd.inl brlcad/trunk/src/qged/display/glm/glm/gtc/random.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/random.inl brlcad/trunk/src/qged/display/glm/glm/gtc/reciprocal.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/reciprocal.inl brlcad/trunk/src/qged/display/glm/glm/gtc/round.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/round.inl brlcad/trunk/src/qged/display/glm/glm/gtc/type_aligned.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/type_precision.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/type_precision.inl brlcad/trunk/src/qged/display/glm/glm/gtc/type_ptr.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/type_ptr.inl brlcad/trunk/src/qged/display/glm/glm/gtc/ulp.hpp brlcad/trunk/src/qged/display/glm/glm/gtc/ulp.inl brlcad/trunk/src/qged/display/glm/glm/gtc/vec1.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/ brlcad/trunk/src/qged/display/glm/glm/gtx/associated_min_max.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/associated_min_max.inl brlcad/trunk/src/qged/display/glm/glm/gtx/bit.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/bit.inl brlcad/trunk/src/qged/display/glm/glm/gtx/closest_point.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/closest_point.inl brlcad/trunk/src/qged/display/glm/glm/gtx/color_encoding.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/color_encoding.inl brlcad/trunk/src/qged/display/glm/glm/gtx/color_space.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/color_space.inl brlcad/trunk/src/qged/display/glm/glm/gtx/color_space_YCoCg.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/color_space_YCoCg.inl brlcad/trunk/src/qged/display/glm/glm/gtx/common.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/common.inl brlcad/trunk/src/qged/display/glm/glm/gtx/compatibility.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/compatibility.inl brlcad/trunk/src/qged/display/glm/glm/gtx/component_wise.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/component_wise.inl brlcad/trunk/src/qged/display/glm/glm/gtx/dual_quaternion.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/dual_quaternion.inl brlcad/trunk/src/qged/display/glm/glm/gtx/easing.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/easing.inl brlcad/trunk/src/qged/display/glm/glm/gtx/euler_angles.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/euler_angles.inl brlcad/trunk/src/qged/display/glm/glm/gtx/extend.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/extend.inl brlcad/trunk/src/qged/display/glm/glm/gtx/extended_min_max.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/extended_min_max.inl brlcad/trunk/src/qged/display/glm/glm/gtx/exterior_product.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/exterior_product.inl brlcad/trunk/src/qged/display/glm/glm/gtx/fast_exponential.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/fast_exponential.inl brlcad/trunk/src/qged/display/glm/glm/gtx/fast_square_root.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/fast_square_root.inl brlcad/trunk/src/qged/display/glm/glm/gtx/fast_trigonometry.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/fast_trigonometry.inl brlcad/trunk/src/qged/display/glm/glm/gtx/float_notmalize.inl brlcad/trunk/src/qged/display/glm/glm/gtx/functions.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/functions.inl brlcad/trunk/src/qged/display/glm/glm/gtx/gradient_paint.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/gradient_paint.inl brlcad/trunk/src/qged/display/glm/glm/gtx/handed_coordinate_space.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/handed_coordinate_space.inl brlcad/trunk/src/qged/display/glm/glm/gtx/hash.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/hash.inl brlcad/trunk/src/qged/display/glm/glm/gtx/integer.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/integer.inl brlcad/trunk/src/qged/display/glm/glm/gtx/intersect.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/intersect.inl brlcad/trunk/src/qged/display/glm/glm/gtx/io.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/io.inl brlcad/trunk/src/qged/display/glm/glm/gtx/log_base.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/log_base.inl brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_cross_product.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_cross_product.inl brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_decompose.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_decompose.inl brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_factorisation.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_factorisation.inl brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_interpolation.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_interpolation.inl brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_major_storage.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_major_storage.inl brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_operation.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_operation.inl brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_query.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_query.inl brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_transform_2d.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/matrix_transform_2d.inl brlcad/trunk/src/qged/display/glm/glm/gtx/mixed_product.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/mixed_product.inl brlcad/trunk/src/qged/display/glm/glm/gtx/norm.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/norm.inl brlcad/trunk/src/qged/display/glm/glm/gtx/normal.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/normal.inl brlcad/trunk/src/qged/display/glm/glm/gtx/normalize_dot.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/normalize_dot.inl brlcad/trunk/src/qged/display/glm/glm/gtx/number_precision.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/number_precision.inl brlcad/trunk/src/qged/display/glm/glm/gtx/optimum_pow.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/optimum_pow.inl brlcad/trunk/src/qged/display/glm/glm/gtx/orthonormalize.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/orthonormalize.inl brlcad/trunk/src/qged/display/glm/glm/gtx/perpendicular.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/perpendicular.inl brlcad/trunk/src/qged/display/glm/glm/gtx/polar_coordinates.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/polar_coordinates.inl brlcad/trunk/src/qged/display/glm/glm/gtx/projection.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/projection.inl brlcad/trunk/src/qged/display/glm/glm/gtx/quaternion.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/quaternion.inl brlcad/trunk/src/qged/display/glm/glm/gtx/range.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/raw_data.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/raw_data.inl brlcad/trunk/src/qged/display/glm/glm/gtx/rotate_normalized_axis.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/rotate_normalized_axis.inl brlcad/trunk/src/qged/display/glm/glm/gtx/rotate_vector.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/rotate_vector.inl brlcad/trunk/src/qged/display/glm/glm/gtx/scalar_multiplication.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/scalar_relational.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/scalar_relational.inl brlcad/trunk/src/qged/display/glm/glm/gtx/spline.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/spline.inl brlcad/trunk/src/qged/display/glm/glm/gtx/std_based_type.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/std_based_type.inl brlcad/trunk/src/qged/display/glm/glm/gtx/string_cast.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/string_cast.inl brlcad/trunk/src/qged/display/glm/glm/gtx/texture.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/texture.inl brlcad/trunk/src/qged/display/glm/glm/gtx/transform.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/transform.inl brlcad/trunk/src/qged/display/glm/glm/gtx/transform2.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/transform2.inl brlcad/trunk/src/qged/display/glm/glm/gtx/type_aligned.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/type_aligned.inl brlcad/trunk/src/qged/display/glm/glm/gtx/type_trait.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/type_trait.inl brlcad/trunk/src/qged/display/glm/glm/gtx/vec_swizzle.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/vector_angle.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/vector_angle.inl brlcad/trunk/src/qged/display/glm/glm/gtx/vector_query.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/vector_query.inl brlcad/trunk/src/qged/display/glm/glm/gtx/wrap.hpp brlcad/trunk/src/qged/display/glm/glm/gtx/wrap.inl brlcad/trunk/src/qged/display/glm/glm/integer.hpp brlcad/trunk/src/qged/display/glm/glm/mat2x2.hpp brlcad/trunk/src/qged/display/glm/glm/mat2x3.hpp brlcad/trunk/src/qged/display/glm/glm/mat2x4.hpp brlcad/trunk/src/qged/display/glm/glm/mat3x2.hpp brlcad/trunk/src/qged/display/glm/glm/mat3x3.hpp brlcad/trunk/src/qged/display/glm/glm/mat3x4.hpp brlcad/trunk/src/qged/display/glm/glm/mat4x2.hpp brlcad/trunk/src/qged/display/glm/glm/mat4x3.hpp brlcad/trunk/src/qged/display/glm/glm/mat4x4.hpp brlcad/trunk/src/qged/display/glm/glm/matrix.hpp brlcad/trunk/src/qged/display/glm/glm/packing.hpp brlcad/trunk/src/qged/display/glm/glm/simd/ brlcad/trunk/src/qged/display/glm/glm/simd/common.h brlcad/trunk/src/qged/display/glm/glm/simd/exponential.h brlcad/trunk/src/qged/display/glm/glm/simd/geometric.h brlcad/trunk/src/qged/display/glm/glm/simd/integer.h brlcad/trunk/src/qged/display/glm/glm/simd/matrix.h brlcad/trunk/src/qged/display/glm/glm/simd/neon.h brlcad/trunk/src/qged/display/glm/glm/simd/packing.h brlcad/trunk/src/qged/display/glm/glm/simd/platform.h brlcad/trunk/src/qged/display/glm/glm/simd/trigonometric.h brlcad/trunk/src/qged/display/glm/glm/simd/vector_relational.h brlcad/trunk/src/qged/display/glm/glm/trigonometric.hpp brlcad/trunk/src/qged/display/glm/glm/vec2.hpp brlcad/trunk/src/qged/display/glm/glm/vec3.hpp brlcad/trunk/src/qged/display/glm/glm/vec4.hpp brlcad/trunk/src/qged/display/glm/glm/vector_relational.hpp brlcad/trunk/src/qged/display/glm/manual.md brlcad/trunk/src/qged/display/glm/readme.md Modified: brlcad/trunk/src/qged/CMakeLists.txt =================================================================== --- brlcad/trunk/src/qged/CMakeLists.txt 2020-06-27 15:12:31 UTC (rev 76233) +++ brlcad/trunk/src/qged/CMakeLists.txt 2020-06-29 13:53:57 UTC (rev 76234) @@ -19,6 +19,11 @@ # because most of BRL-CAD's targets are not Qt targets. We don't # want to run the automatic moc logic for all of them. + +include_directories( + "display" + "display/glm/") + set(qged_srcs main.cpp main_window.cpp @@ -39,6 +44,13 @@ QAccordionWidget.cpp QToolPalette.cpp QFlowLayout.cpp + display/OrthographicCamera.cpp + display/Display.cpp + display/DisplayManager.cpp + display/GeometryRenderer.cpp + display/GeometryRenderer.h + display/AxesRenderer.cpp + display/AxesRenderer.h ) set(moc_headers @@ -59,6 +71,10 @@ QAccordionWidget.h QToolPalette.h QFlowLayout.h + display/Camera.h + display/OrthographicCamera.h + display/Display.h + display/DisplayManager.h ) if(BRLCAD_ENABLE_QT) Modified: brlcad/trunk/src/qged/cadapp.cpp =================================================================== --- brlcad/trunk/src/qged/cadapp.cpp 2020-06-27 15:12:31 UTC (rev 76233) +++ brlcad/trunk/src/qged/cadapp.cpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -39,6 +39,7 @@ ged_pointer = GED_NULL; current_idx = QModelIndex(); interaction_mode = 0; + BU_LIST_INIT(&RTG.rtg_vlfree); } struct db_i * Added: brlcad/trunk/src/qged/display/AxesRenderer.cpp =================================================================== --- brlcad/trunk/src/qged/display/AxesRenderer.cpp (rev 0) +++ brlcad/trunk/src/qged/display/AxesRenderer.cpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,52 @@ +/* A X E S R E N D E R E R . C P P + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file AxesRenderer.cpp */ +// +// Created by Sadeep on 28-Jun. +// + +#include "common.h" + +#if defined(WIN32) && !defined(__CYGWIN__) +#include<windows.h> +#endif + +#ifdef HAVE_GL_GL_H +# include <GL/gl.h> +#endif +#include "AxesRenderer.h" + +#define GRID_LINE_LENGTH 100000 + +void AxesRenderer::render() { + glBegin(GL_LINES); + glColor3f(0,1,0); + glVertex3f(0, GRID_LINE_LENGTH, 0); + glVertex3f(0, -0, 0); + + glColor3f(0,0,1); + glVertex3f(0, 0, GRID_LINE_LENGTH); + glVertex3f(0, 0, -0); + + glColor3f(1,0,0); + glVertex3f( GRID_LINE_LENGTH, 0,0); + glVertex3f( -0, 0,0); + glEnd(); +} Property changes on: brlcad/trunk/src/qged/display/AxesRenderer.cpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/AxesRenderer.h =================================================================== --- brlcad/trunk/src/qged/display/AxesRenderer.h (rev 0) +++ brlcad/trunk/src/qged/display/AxesRenderer.h 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,36 @@ +/* A X E S R E N D E R E R . H + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file AxesRenderer.h */ +// +// Created by Sadeep on 28-Jun. +// + +#ifndef BRLCAD_AXESRENDERER_H +#define BRLCAD_AXESRENDERER_H + + +#include "Renderable.h" + +class AxesRenderer: public Renderable { + void render() override; +}; + + +#endif //BRLCAD_AXESRENDERER_H Property changes on: brlcad/trunk/src/qged/display/AxesRenderer.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/Camera.h =================================================================== --- brlcad/trunk/src/qged/display/Camera.h (rev 0) +++ brlcad/trunk/src/qged/display/Camera.h 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,49 @@ +/* C A M E R A . H + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file Camera.h */ +// +// Created by Sadeep on 09-Jun. +// + +#ifndef RT3_CAMERABK_H +#define RT3_CAMERABK_H + + +#include <glm/detail/type_mat4x4.hpp> + + +class Camera { +public: + glm::vec3 axisX = glm::vec3(1.0f,0.0f,0.0f); + glm::vec3 axisY = glm::vec3(0.0f,1.0f,0.0f); + glm::vec3 axisZ = glm::vec3(0.0f,0.0f,1.0f); + + virtual void setWH(float w, float h) = 0; + virtual void processMoveRequest(const int &deltaX, const int &deltaY) = 0; + virtual void processRotateRequest(const int & deltaX, const int & deltaY, const bool& thirdAxis) = 0; + virtual void processZoomRequest(const int & deltaWheelAngle) = 0; + + virtual glm::mat4 modelViewMatrix() const = 0; + virtual glm::mat4 projectionMatrix() const = 0; + +}; + + +#endif //RT3_CAMERABK_H Property changes on: brlcad/trunk/src/qged/display/Camera.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/Display.cpp =================================================================== --- brlcad/trunk/src/qged/display/Display.cpp (rev 0) +++ brlcad/trunk/src/qged/display/Display.cpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,207 @@ +/* D I S P L A Y . C P P + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file Display.cpp */ +// +// Created by Sadeep on 07-Jun. +// + +#include "Display.h" +#include <glm/gtc/type_ptr.hpp> +#include <QtWidgets/QApplication> +#include <OrthographicCamera.h> +#include "DisplayManager.h" +#include "GeometryRenderer.h" +#include "cadapp.h" + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic ignored "-Wshadow" +#endif +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wshadow" +#endif + + +using namespace std; + + +Display::Display(rt_wdb *database) { + this->database = database; + camera = new OrthographicCamera(); + displayManager = new DisplayManager(this); + geometryRenderer = new GeometryRenderer(database,displayManager); + axesRenderer = new AxesRenderer(); + + renderers.push_back(geometryRenderer); + renderers.push_back(axesRenderer); +} + + +void Display::resizeGL(int w, int h) { + camera->setWH(w,h); + this->w = w; + this->h = h; +} + +void Display::paintGL() { + displayManager->drawBegin(); + + displayManager->loadMatrix((const float*)glm::value_ptr(camera->modelViewMatrix())); + displayManager->loadPMatrix((const float*)glm::value_ptr(camera->projectionMatrix())); + + for (auto i:renderers) i->render(); +} + +void Display::refresh() { + makeCurrent(); + update(); +} + + +void Display::mouseMoveEvent(QMouseEvent *event) { + int x = event->x(); + int y = event->y(); + int globalX = event->globalX(); + int globalY = event->globalY(); + + bool resetX = false, resetY = false; + + if(prevMouseX != -1 && prevMouseY != -1 && (event->buttons() & (rotateCameraMouseButton|moveCameraMouseButton))) { + if (skipNextMouseMoveEvent) { + skipNextMouseMoveEvent = false; + return; + } + if(event->buttons() & (rotateCameraMouseButton)) { + bool rotateThirdAxis = QApplication::keyboardModifiers().testFlag(rotateAroundThirdAxisModifier); + camera->processRotateRequest(x- prevMouseX, y - prevMouseY,rotateThirdAxis); + } + if(event->buttons() & (moveCameraMouseButton)){ + camera->processMoveRequest(x- prevMouseX, y - prevMouseY); + } + + refresh(); + + auto topLeft = mapToGlobal(QPoint(0,0)); + auto bottomRight = mapToGlobal(QPoint(size().width(),size().height())); + + int newX = -1; + int newY = -1; + + if (globalX <= topLeft.x()) { + newX = bottomRight.x()-1; + resetX = true; + } + if (globalX >= bottomRight.x()) { + newX = topLeft.x()+1; + resetX = true; + } + if (globalY <= topLeft.y()) { + newY = bottomRight.y()-1; + resetY = true; + } + if (globalY >= bottomRight.y()) { + newY = topLeft.y()+1; + resetY = true; + } + + if (resetX || resetY) { + prevMouseX = resetX ? mapFromGlobal(QPoint(newX,newY)).x() : x; + prevMouseY = resetY ? mapFromGlobal(QPoint(newX,newY)).y() : y; + QCursor::setPos(resetX ? newX : globalX, resetY ? newY : globalY); + skipNextMouseMoveEvent = true; + } + } + + if(!resetX && !resetY) { + prevMouseX = x; + prevMouseY = y; + } +} + +void Display::mousePressEvent(QMouseEvent *event) { + prevMouseX = event->x(); + prevMouseY = event->y(); +} + +void Display::mouseReleaseEvent(QMouseEvent *UNUSED(event)) { + prevMouseX = -1; + prevMouseY = -1; +} + +void Display::wheelEvent(QWheelEvent *event) { + + if (event->phase() == Qt::NoScrollPhase || event->phase() == Qt::ScrollUpdate || event->phase() == Qt::ScrollMomentum) { + camera->processZoomRequest(event->angleDelta().y() / 8); + refresh(); + } +} + +void Display::keyPressEvent( QKeyEvent *k ) { + switch (k->key()) { + case Qt::Key_Up: + camera->processMoveRequest(0, keyPressSimulatedMouseMoveDistance); + refresh(); + break; + case Qt::Key_Down: + camera->processMoveRequest(0, -keyPressSimulatedMouseMoveDistance); + refresh(); + break; + case Qt::Key_Left: + camera->processMoveRequest(keyPressSimulatedMouseMoveDistance, 0); + refresh(); + break; + case Qt::Key_Right: + camera->processMoveRequest(-keyPressSimulatedMouseMoveDistance, 0); + refresh(); + break; + } +} + +void Display::onDatabaseUpdated() { + geometryRenderer->onDatabaseUpdated(); +} + +int Display::getW() const { + return w; +} + +int Display::getH() const { + return h; +} + +void Display::onDatabaseOpen() { + makeCurrent(); + geometryRenderer->setDatabase(((CADApp *)qApp)->wdbp()); + onDatabaseUpdated(); + update(); +} + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + Property changes on: brlcad/trunk/src/qged/display/Display.cpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/Display.h =================================================================== --- brlcad/trunk/src/qged/display/Display.h (rev 0) +++ brlcad/trunk/src/qged/display/Display.h 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,85 @@ +/* D I S P L A Y . H + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file Display.h */ +// +// Created by Sadeep on 07-Jun. +// + +#ifndef RT3_DISPLAY_H +#define RT3_DISPLAY_H + +#include <QtWidgets/QOpenGLWidget> +#include "Camera.h" +#include "AxesRenderer.h" +#include <QMouseEvent> +#include <rt/db_instance.h> + +class DisplayManager; +class GeometryRenderer; + + +class Display : public QOpenGLWidget{ + +Q_OBJECT +public: + Display(rt_wdb *_database); + + Camera *camera; + void onDatabaseUpdated(); + void refresh(); + + int getW() const; + int getH() const; + +protected: + void resizeGL(int w, int h) override; + void paintGL() override; + + void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void wheelEvent(QWheelEvent *event) override; + void keyPressEvent(QKeyEvent *k) override ; + +private: + int w = 400; + int h = 400; + int prevMouseX = -1; + int prevMouseY = -1; + bool skipNextMouseMoveEvent = false; + float keyPressSimulatedMouseMoveDistance = 8; + + Qt::MouseButton rotateCameraMouseButton = Qt::LeftButton; + Qt::MouseButton moveCameraMouseButton = Qt::RightButton; + Qt::KeyboardModifier rotateAroundThirdAxisModifier = Qt::ShiftModifier; + + + DisplayManager *displayManager; + rt_wdb *database; + GeometryRenderer * geometryRenderer; + AxesRenderer * axesRenderer; + std::vector<Renderable*> renderers; + +public slots: + void onDatabaseOpen(); +}; + + +#endif //RT3_DISPLAY_H Property changes on: brlcad/trunk/src/qged/display/Display.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/DisplayManager.cpp =================================================================== --- brlcad/trunk/src/qged/display/DisplayManager.cpp (rev 0) +++ brlcad/trunk/src/qged/display/DisplayManager.cpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,375 @@ +/* D I S P L A Y M A N A G E R . C P P + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file DisplayManager.cpp */ +// +// Created by Sadeep on 12-Jun. +// +#include <rt/db_internal.h> +#include <rt/functab.h> +#include <rt/db_io.h> +#include "DisplayManager.h" +#include <rt/global.h> + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic ignored "-Wshadow" +#endif +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wshadow" +#endif + +#define DM_SOLID_LINE 0 +#define DM_DASHED_LINE 1 + +DisplayManager::DisplayManager(Display *display) : display(display) { + setFGColor(0,0,0, 1); + glLineStipple(1, 0xCF33); +} + +void DisplayManager::drawVList(bn_vlist *vp) { + + struct bn_vlist *tvp; + int first = 1; + int mflag = 1; + GLfloat originalPointSize, originalLineWidth; + GLdouble m[16]; + GLdouble mt[16]; + GLdouble tlate[3]; + const float black[4] = {0.0, 0.0, 0.0, 0.0}; + + glGetFloatv(GL_POINT_SIZE, &originalPointSize); + glGetFloatv(GL_LINE_WIDTH, &originalLineWidth); + + /* Viewing region is from -1.0 to +1.0 */ + + for (BU_LIST_FOR(tvp, bn_vlist, &vp->l)) { + int i; + int nused = tvp->nused; + int *cmd = tvp->cmd; + point_t *pt = tvp->pt; + GLdouble glpt[3]; + + for (i = 0; i < nused; i++, cmd++, pt++) { + VMOVE(glpt, *pt); + + switch (*cmd) { + case BN_VLIST_LINE_MOVE: + /* Move, start line */ + if (first == 0) + glEnd(); + first = 0; + + if (dmLight && mflag) { + mflag = 0; + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, wireColor); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, black); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, black); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, black); + + if (dmTransparency) + glDisable(GL_BLEND); + } + + glBegin(GL_LINE_STRIP); + glVertex3dv(glpt); + break; + case BN_VLIST_MODEL_MAT: + if (first == 0) { + glEnd(); + first = 1; + } + + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + break; + case BN_VLIST_DISPLAY_MAT: + glMatrixMode(GL_MODELVIEW); + glGetDoublev(GL_MODELVIEW_MATRIX, m); + + MAT_TRANSPOSE(mt, m); + MAT4X3PNT(tlate, mt, glpt); + + glPushMatrix(); + glLoadIdentity(); + glTranslated(tlate[0], tlate[1], tlate[2]); + /* 96 dpi = 3.78 pixel/mm hardcoded */ + glScaled(2. * 3.78 / display->getW(), + 2. * 3.78 / display->getH(), + 1.); + break; + case BN_VLIST_POLY_START: + case BN_VLIST_TRI_START: + /* Start poly marker & normal */ + + if (dmLight && mflag) { + mflag = 0; + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambientColor); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specularColor); + glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseColor); + + switch (dmLight) { + case 1: + break; + case 2: + glMaterialfv(GL_BACK, GL_DIFFUSE, diffuseColor); + break; + case 3: + glMaterialfv(GL_BACK, GL_DIFFUSE, backDiffuseColorDark); + break; + default: + glMaterialfv(GL_BACK, GL_DIFFUSE, backDiffuseColorLight); + break; + } + + if (dmTransparency) + glEnable(GL_BLEND); + } + + if (*cmd == BN_VLIST_POLY_START) { + if (first == 0) + glEnd(); + + glBegin(GL_POLYGON); + } else if (first) + glBegin(GL_TRIANGLES); + + /* Set surface normal (vl_pnt points outward) */ + glNormal3dv(glpt); + + first = 0; + + break; + case BN_VLIST_LINE_DRAW: + case BN_VLIST_POLY_MOVE: + case BN_VLIST_POLY_DRAW: + case BN_VLIST_TRI_MOVE: + case BN_VLIST_TRI_DRAW: + glVertex3dv(glpt); + + break; + case BN_VLIST_POLY_END: + /* Draw, End Polygon */ + glVertex3dv(glpt); + glEnd(); + first = 1; + break; + case BN_VLIST_TRI_END: + break; + case BN_VLIST_POLY_VERTNORM: + case BN_VLIST_TRI_VERTNORM: + /* Set per-vertex normal. Given before vert. */ + glNormal3dv(glpt); + break; + case BN_VLIST_POINT_DRAW: + if (first == 0) + glEnd(); + first = 0; + glBegin(GL_POINTS); + glVertex3dv(glpt); + break; + case BN_VLIST_LINE_WIDTH: { + GLfloat lineWidth = (GLfloat) (*pt)[0]; + if (lineWidth > 0.0) { + glLineWidth(lineWidth); + } + break; + } + case BN_VLIST_POINT_SIZE: { + GLfloat pointSize = (GLfloat) (*pt)[0]; + if (pointSize > 0.0) { + glPointSize(pointSize); + } + break; + } + } + } + } + + if (first == 0) + glEnd(); + + if (dmLight && dmTransparency) + glDisable(GL_BLEND); + + glPointSize(originalPointSize); + glLineWidth(originalLineWidth); + return; +} + + +void DisplayManager::setFGColor(float r, float g, float b, float transparency) { + wireColor[0] = r; + wireColor[1] = g; + wireColor[2] = b; + wireColor[3] = transparency; + + diffuseColor[0] = wireColor[0] * 0.6f; + diffuseColor[1] = wireColor[1] * 0.6f; + diffuseColor[2] = wireColor[2] * 0.6f; + diffuseColor[3] = wireColor[3]; + + ambientColor[0] = wireColor[0] * 0.2f; + ambientColor[1] = wireColor[1] * 0.2f; + ambientColor[2] = wireColor[2] * 0.2f; + ambientColor[3] = wireColor[3]; + + specularColor[0] = ambientColor[0]; + specularColor[1] = ambientColor[1]; + specularColor[2] = ambientColor[2]; + specularColor[3] = ambientColor[3]; + + backDiffuseColorDark[0] = wireColor[0] * 0.3f; + backDiffuseColorDark[1] = wireColor[1] * 0.3f; + backDiffuseColorDark[2] = wireColor[2] * 0.3f; + backDiffuseColorDark[3] = wireColor[3]; + + backDiffuseColorLight[0] = wireColor[0] * 0.9f; + backDiffuseColorLight[1] = wireColor[1] * 0.9f; + backDiffuseColorLight[2] = wireColor[2] * 0.9f; + backDiffuseColorLight[3] = wireColor[3]; + + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambientColor); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specularColor); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuseColor); +} + +/* + * Set the style of the line + * + * Valid Styles, + * DM_SOLID_LINE=0 + * DM_DASHED_LINE=1 + */ +void DisplayManager::setLineStyle(int style) +{ + if (style == DM_DASHED_LINE) { + glEnable(GL_LINE_STIPPLE); + } + else{ + glDisable(GL_LINE_STIPPLE); + } +} + +void DisplayManager::setLineWidth(int width) +{ + glLineWidth((GLfloat) width); +} + +/* + * Set the width and style of the line. + * + * Valid Styles, + * DM_SOLID_LINE=0 + * DM_DASHED_LINE=1 + */ +void DisplayManager::setLineAttr(int width, int style) +{ + if (width>0) { + glLineWidth((GLfloat) width); + } + + if (style == DM_DASHED_LINE) { + glEnable(GL_LINE_STIPPLE); + } + else { + glDisable(GL_LINE_STIPPLE); + } +} + +/* + * Displays a saved display list identified by `list` + */ +void DisplayManager::drawDList(unsigned int list) { + glCallList((GLuint) list); +} + +/* + * Generates `range` number of display lists and returns first display list's index + */ +unsigned int DisplayManager::genDLists(size_t range) +{ + return glGenLists((GLsizei)range); +} + +/* + * Supported subsequent opengl commands are compiled into the display list `list` rather than being rendered to the screen. + * Should have called genDLists and generated the display list before calling this. + */ +void DisplayManager::beginDList(unsigned int list) +{ + glNewList((GLuint)list, GL_COMPILE); +} + +/* + * End of the display list initiated by beginDList. + */ +void DisplayManager::endDList() +{ + glEndList(); +} + +void DisplayManager::freeDLists(unsigned int list, int range) +{ + glDeleteLists((GLuint)list, (GLsizei)range); +} +void DisplayManager::saveState(){ + glPushAttrib(GL_ALL_ATTRIB_BITS); +} +void DisplayManager::restoreState(){ + glPopAttrib(); +} + +void DisplayManager::drawBegin() +{ + glClearColor(bgColor[0],bgColor[1],bgColor[2],1); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +// glMatrixMode(GL_PROJECTION); +// glPopMatrix(); +// glMatrixMode(GL_MODELVIEW); +// glPopMatrix(); + +} + +void DisplayManager::loadMatrix(const GLfloat *m) +{ + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glLoadMatrixf(m); +} +void DisplayManager::loadPMatrix(const GLfloat *m) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glLoadMatrixf(m); +} + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + Property changes on: brlcad/trunk/src/qged/display/DisplayManager.cpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/DisplayManager.h =================================================================== --- brlcad/trunk/src/qged/display/DisplayManager.h (rev 0) +++ brlcad/trunk/src/qged/display/DisplayManager.h 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,77 @@ +/* D I S P L A Y M A N A G E R . H + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file DisplayManager.h */ +// +// Created by Sadeep on 12-Jun. +// + +#ifndef RT3_DisplayManager_H +#define RT3_DisplayManager_H +#ifdef _WIN32 +#include <Windows.h> +#endif + + +#include "vmath.h" +#include "Display.h" +#include <rt/tree.h> + + + + +class DisplayManager{ +public: + explicit DisplayManager(Display *display); + + // most of the methods below correspond to a method with a similar name from libdm + void drawVList(bn_vlist *vp); + void setFGColor(float r, float g, float b, float transparency); + void setLineAttr(int width, int style); + void setLineStyle(int style); + void setLineWidth(int width); + unsigned int genDLists(size_t range); + void beginDList(unsigned int list); + void endDList(); + void drawDList(unsigned int list); + void freeDLists(unsigned int list, int range); + void saveState(); + void restoreState(); + void drawBegin(); + void loadMatrix(const GLfloat *m); + void loadPMatrix(const GLfloat *m); + +private: + Display *display; + + int dmLight = 1; + bool dmTransparency = false; + + float wireColor[4] = {.9,.1,.1,1}; + float diffuseColor[4]; + float ambientColor[4]; + float specularColor[4]; + float backDiffuseColorDark[4]; + float backDiffuseColorLight[4]; + float bgColor[3] = {0.0, 0.0, 0.125}; + +}; + + +#endif //RT3_DisplayManager_H Property changes on: brlcad/trunk/src/qged/display/DisplayManager.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/GeometryRenderer.cpp =================================================================== --- brlcad/trunk/src/qged/display/GeometryRenderer.cpp (rev 0) +++ brlcad/trunk/src/qged/display/GeometryRenderer.cpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,139 @@ +/* G E O M E T R Y R E N D E R E R . C P P + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file GeometryRenderer.cpp */ +// +// Created by Sadeep on 28-Jun. +// + +#include "common.h" +#include "GeometryRenderer.h" + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic ignored "-Wshadow" +#endif +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wshadow" +#endif + + +GeometryRenderer::GeometryRenderer(rt_wdb *database, DisplayManager *displayManager) : database(database), + displayManager(displayManager) {} + +void GeometryRenderer::render() { + if (database == NULL) return; + displayManager->saveState(); + glEnable(GL_LIGHTING); + for (auto i:solids) { + displayManager->drawDList(i); + } + displayManager->restoreState(); +} + +/* + * Clears existing display lists, iterate through each solid and generates display lists by calling drawSolid on each + */ +void GeometryRenderer::onDatabaseUpdated() { + rt_i * r_db = rt_new_rti(database->dbip); + + db_tree_state initState; + db_init_db_tree_state(&initState, r_db->rti_dbip, database->wdb_resp); + initState.ts_ttol = &r_db->rti_ttol; + initState.ts_tol = &r_db->rti_tol; + + for (auto i: solids){ + displayManager->freeDLists(i,1); + } + solids.clear(); + + struct directory **dbObjects = NULL; + int path_cnt = db_ls(database->dbip, DB_LS_TOPS, NULL, &dbObjects); + if (path_cnt) { + for (int i = 0; i < path_cnt; i++) { + const char *topObjectName = dbObjects[i]->d_namep; + db_walk_tree(r_db->rti_dbip, 1, &topObjectName, 1, &initState, 0, 0, drawSolid, this); + } + } + + rt_free_rti(r_db); +} + + +/* + * Set the color and line attribute to suit a given solid, creates a display list, plots and draws solid's vlist into the display list. + * The created display list is added to GeometryRenderer::solids + */ +tree *GeometryRenderer::drawSolid(db_tree_state *tsp, const db_full_path *UNUSED(pathp), rt_db_internal *ip, void *clientData) { + tree *ret = TREE_NULL; + auto *geometryRenderer = static_cast<GeometryRenderer *>(clientData); + auto *displayManager = geometryRenderer->displayManager; + + struct bu_list vhead; + BU_LIST_INIT(&vhead); + + if (ip->idb_meth->ft_plot != 0) { + if (ip->idb_meth->ft_plot(&vhead, ip, tsp->ts_ttol, tsp->ts_tol, 0) == 0) { + BU_GET(ret, tree); + RT_TREE_INIT(ret); + ret->tr_op = OP_NOP; + } + } + + GLuint dlist = displayManager->genDLists(1); + displayManager->beginDList(dlist); // begin display list -------------- + + if (tsp->ts_mater.ma_color_valid) { + displayManager->setFGColor(tsp->ts_mater.ma_color[0], tsp->ts_mater.ma_color[1], tsp->ts_mater.ma_color[2], 1); + } + else { + displayManager->setFGColor(geometryRenderer->defaultWireColor[0], geometryRenderer->defaultWireColor[1], + geometryRenderer->defaultWireColor[2], 1); + } + + displayManager->setLineStyle(tsp->ts_sofar & (TS_SOFAR_MINUS | TS_SOFAR_INTER)); + displayManager->drawVList(reinterpret_cast<bn_vlist *>(&vhead)); + displayManager->endDList(); // end display list -------------- + + geometryRenderer->solids.push_back(dlist); + + return ret; +} + +rt_wdb *GeometryRenderer::getDatabase() { + return database; +} + +void GeometryRenderer::setDatabase(rt_wdb *database) { + this->database = database; + onDatabaseUpdated(); +} + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + Property changes on: brlcad/trunk/src/qged/display/GeometryRenderer.cpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/GeometryRenderer.h =================================================================== --- brlcad/trunk/src/qged/display/GeometryRenderer.h (rev 0) +++ brlcad/trunk/src/qged/display/GeometryRenderer.h 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,65 @@ +/* G E O M E T R Y R E N D E R E R . H + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file GeometryRenderer.h */ +// +// Created by Sadeep on 28-Jun. +// + +#ifndef BRLCAD_GEOMETRYRENDERER_H +#define BRLCAD_GEOMETRYRENDERER_H + + +#include <rt/wdb.h> +#include <rt/tree.h> +#include <rt/db_instance.h> +#include <rt/functab.h> +#include <raytrace.h> +#include <rt/db_io.h> +#include "DisplayManager.h" +#include "Renderable.h" +#include <rt/global.h> + +struct rt_i; +struct bu_list; +struct bn_vlist; +struct db_tree_state; +struct db_full_path; +struct rt_db_internal; +union tree; + +class GeometryRenderer:public Renderable { +public: + GeometryRenderer(rt_wdb *database, DisplayManager *displayManager); + + rt_wdb * getDatabase(); + void setDatabase(rt_wdb *database); + + static tree *drawSolid(db_tree_state *tsp, const db_full_path *pathp, rt_db_internal *ip, void *clientData); + void onDatabaseUpdated(); + void render(); +private: + rt_wdb *database; + DisplayManager *displayManager; + float defaultWireColor[3] = {1,.1,.4}; + std::vector<int> solids; // contains the display list of each solid +}; + + +#endif //BRLCAD_GEOMETRYRENDERER_H Property changes on: brlcad/trunk/src/qged/display/GeometryRenderer.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/OrthographicCamera.cpp =================================================================== --- brlcad/trunk/src/qged/display/OrthographicCamera.cpp (rev 0) +++ brlcad/trunk/src/qged/display/OrthographicCamera.cpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,109 @@ +/* O R T H O G R A P H I C C A M E R A . C P P + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file OrthographicCamera.cpp */ +// +// Created by Sadeep on 09-Jun. +// + +#include "common.h" + +#include "OrthographicCamera.h" +#include <glm/glm.hpp> +#include <glm/gtx/transform.hpp> + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic ignored "-Wshadow" +#endif +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wshadow" +#endif + +OrthographicCamera::OrthographicCamera() = default; + +glm::mat4 OrthographicCamera::modelViewMatrix() const { + auto rotationMatrixAroundX = glm::rotate(glm::radians(angleAroundAxes.x), axisX); + auto rotationMatrixAroundY = glm::rotate(glm::radians(angleAroundAxes.y), axisY); + auto rotationMatrixAroundZ = glm::rotate(glm::radians(angleAroundAxes.z), axisZ); + auto rotationMatrix = rotationMatrixAroundX * rotationMatrixAroundY * rotationMatrixAroundZ; + + return glm::translate(rotationMatrix, eyePosition); +} + +glm::mat4 OrthographicCamera::projectionMatrix() const { + return glm::ortho(-zoom * w / h, zoom * w / h, -zoom, zoom, nearPlane, farPlane); +} + +void OrthographicCamera::setWH(float w, float h) { + this->w = w; + this->h = h; +} + +void OrthographicCamera::processRotateRequest(const int &deltaX, const int &deltaY, const bool &thirdAxis) { + if (deltaX < -mouseMaxDrag || deltaX > +mouseMaxDrag || deltaY < -mouseMaxDrag || deltaY > +mouseMaxDrag) { + return; + } + + float deltaAngleX = float(deltaX) / h; + float deltaAngleY = float(deltaY) / h; + if (thirdAxis) { + angleAroundAxes.y += deltaAngleX * eyeRotationPerMouseDelta; + } else { + angleAroundAxes.z += deltaAngleX * eyeRotationPerMouseDelta; + } + angleAroundAxes.x += deltaAngleY * eyeRotationPerMouseDelta; + +} + +void OrthographicCamera::processMoveRequest(const int &deltaX, const int &deltaY) { + if (deltaX < -mouseMaxDrag || deltaX > +mouseMaxDrag || deltaY < -mouseMaxDrag || deltaY > +mouseMaxDrag) { + return; + } + + auto rotationMatrixAroundZ = glm::rotate(glm::radians(-angleAroundAxes.z), axisZ); + auto rotationMatrixAroundY = glm::rotate(glm::radians(-angleAroundAxes.y), axisY); + auto rotationMatrixAroundX = glm::rotate(glm::radians(-angleAroundAxes.x), axisX); + auto rotationMatrix = rotationMatrixAroundZ * rotationMatrixAroundY * rotationMatrixAroundX; + + glm::vec3 cameraRightDirection(rotationMatrix * glm::vec4(axisX, 1.0)); + eyePosition += float(deltaX) * eyeMovementPerMouseDelta * cameraRightDirection * zoom; + + glm::vec3 cameraUpDirection(rotationMatrix * glm::vec4(axisY, 1.0)); + eyePosition -= float(deltaY) * eyeMovementPerMouseDelta * cameraUpDirection * zoom; +} + +void OrthographicCamera::processZoomRequest(const int &deltaWheelAngle) { + float zoomFactor = 1 - zoomFactorMultiplier * float(deltaWheelAngle); + zoom = pow(zoom, zoomFactor); + if (zoom < zoomLowerBound) zoom = zoomLowerBound; +} + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + Property changes on: brlcad/trunk/src/qged/display/OrthographicCamera.cpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/OrthographicCamera.h =================================================================== --- brlcad/trunk/src/qged/display/OrthographicCamera.h (rev 0) +++ brlcad/trunk/src/qged/display/OrthographicCamera.h 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,68 @@ +/* O R T H O G R A P H I C C A M E R A . H + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file OrthographicCamera.h */ +// +// Created by Sadeep on 09-Jun. +// + +#ifndef RT3_OrthographicCAMERA_H +#define RT3_OrthographicCAMERA_H + + +#include <glm/detail/type_mat4x4.hpp> +#include "Camera.h" + + +class OrthographicCamera : public Camera { +private: + const glm::vec3 initialEyePosition = glm::vec3(0.0f, 0.0f, 0.0f); + const glm::vec3 initialAngleAroundAxes = glm::vec3(295.0f, 0.0f, 235.0f); + + const float nearPlane = -2000000.0f; + const float farPlane = 2000000.0f; + const float eyeMovementPerMouseDelta = 0.002075f; + const float eyeRotationPerMouseDelta = 120.f; + const float zoomFactorMultiplier = 0.001; + const float zoomLowerBound = 0.00001; + const int mouseMaxDrag = 500; + + glm::vec3 angleAroundAxes = initialAngleAroundAxes; // Camera direction in degrees + float zoom = 600; + glm::vec3 eyePosition = initialEyePosition; // Camera coordinates + float w = 400, h = 400; // Display width and height. + +public: + OrthographicCamera(); + + void setWH(float w, float h) override; + + void processMoveRequest(const int &deltaX, const int &deltaY) override; + + void processRotateRequest(const int &deltaX, const int &deltaY, const bool &thirdAxis) override; + + void processZoomRequest(const int &deltaWheelAngle) override; + + glm::mat4 modelViewMatrix() const override; + + glm::mat4 projectionMatrix() const override; +}; + + +#endif //RT3_OrthographicCAMERA_H Property changes on: brlcad/trunk/src/qged/display/OrthographicCamera.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/README.txt =================================================================== --- brlcad/trunk/src/qged/display/README.txt (rev 0) +++ brlcad/trunk/src/qged/display/README.txt 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,8 @@ +Display - the qt widget (QOpenGLWidget) that displays stuff, handle mouse move, asks all renderers to draw things +Renderer - a virtual class, GeometryRenderer and AxesRenderer are subclasses +GeometryRenderer- manages rendering a database +AxesRenderer - manages rendering axes +Camera - a virtual class, input is mouse/keyboard events etc, outputs projection and modelview matrices. OrthographicCamera is a subclass +DisplayManager - similar to dm_wgl.c. Renderers use this. (need to fix AxesRenderer to utilize this rather than direct opengl) + +Display puts everything together Property changes on: brlcad/trunk/src/qged/display/README.txt ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/Renderable.h =================================================================== --- brlcad/trunk/src/qged/display/Renderable.h (rev 0) +++ brlcad/trunk/src/qged/display/Renderable.h 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,34 @@ +/* R E N D E R A B L E . H + * BRL-CAD + * + * Copyright (c) 2020 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file Renderable.h */ +// +// Created by Sadeep on 29-Jun. +// + +#ifndef BRLCAD_RENDERABLE_H +#define BRLCAD_RENDERABLE_H + +class Renderable { +public: + virtual void render() = 0; + virtual ~Renderable() {} +}; + +#endif //BRLCAD_RENDERABLE_H Property changes on: brlcad/trunk/src/qged/display/Renderable.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/CMakeLists.txt =================================================================== --- brlcad/trunk/src/qged/display/glm/CMakeLists.txt (rev 0) +++ brlcad/trunk/src/qged/display/glm/CMakeLists.txt 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.2 FATAL_ERROR) +cmake_policy(VERSION 3.2) + +set(GLM_VERSION "0.9.9") +project(glm VERSION ${GLM_VERSION} LANGUAGES CXX) +enable_testing() + +add_subdirectory(glm) +add_library(glm::glm ALIAS glm) + Property changes on: brlcad/trunk/src/qged/display/glm/CMakeLists.txt ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig-version.cmake =================================================================== --- brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig-version.cmake (rev 0) +++ brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig-version.cmake 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,11 @@ +if(${PACKAGE_FIND_VERSION_MAJOR} EQUAL 0) + if (${PACKAGE_FIND_VERSION} VERSION_LESS ${GLM_VERSION}) + set(PACKAGE_VERSION_COMPATIBLE 1) + endif() + if(${PACKAGE_FIND_VERSION} VERSION_EQUAL ${GLM_VERSION}) + set(PACKAGE_VERSION_EXACT 1) + endif() +else() + set(PACKAGE_VERSION_UNSUITABLE 1) +endif() + Property changes on: brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig-version.cmake ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig.cmake =================================================================== --- brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig.cmake (rev 0) +++ brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig.cmake 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.2 FATAL_ERROR) +cmake_policy(VERSION 3.2) + +set(GLM_VERSION 0.9.9) + +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if (_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Set the old GLM_INCLUDE_DIRS variable for backwards compatibility +set(GLM_INCLUDE_DIRS ${_IMPORT_PREFIX}) + +add_library(glm::glm INTERFACE IMPORTED) +set_target_properties(glm::glm PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${GLM_INCLUDE_DIRS}) + +mark_as_advanced(glm_DIR) +set(_IMPORT_PREFIX) + Property changes on: brlcad/trunk/src/qged/display/glm/cmake/glm/glmConfig.cmake ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/copying.txt =================================================================== --- brlcad/trunk/src/qged/display/glm/copying.txt (rev 0) +++ brlcad/trunk/src/qged/display/glm/copying.txt 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,29 @@ +================================================================================ +OpenGL Mathematics (GLM) +-------------------------------------------------------------------------------- +GLM is licensed under The Happy Bunny License or MIT License + +BRL-CAD will use glm under the standard MIT license + +================================================================================ +The MIT License +-------------------------------------------------------------------------------- +Copyright (c) 2005 - G-Truc Creation + +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. Property changes on: brlcad/trunk/src/qged/display/glm/copying.txt ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/glm/CMakeLists.txt =================================================================== --- brlcad/trunk/src/qged/display/glm/glm/CMakeLists.txt (rev 0) +++ brlcad/trunk/src/qged/display/glm/glm/CMakeLists.txt 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,70 @@ +file(GLOB ROOT_SOURCE *.cpp) +file(GLOB ROOT_INLINE *.inl) +file(GLOB ROOT_HEADER *.hpp) +file(GLOB ROOT_TEXT ../*.txt) +file(GLOB ROOT_MD ../*.md) +file(GLOB ROOT_NAT ../util/glm.natvis) + +file(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp) +file(GLOB_RECURSE CORE_INLINE ./detail/*.inl) +file(GLOB_RECURSE CORE_HEADER ./detail/*.hpp) + +file(GLOB_RECURSE EXT_SOURCE ./ext/*.cpp) +file(GLOB_RECURSE EXT_INLINE ./ext/*.inl) +file(GLOB_RECURSE EXT_HEADER ./ext/*.hpp) + +file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp) +file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl) +file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp) + +file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp) +file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl) +file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp) + +file(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp) +file(GLOB_RECURSE SIMD_INLINE ./simd/*.inl) +file(GLOB_RECURSE SIMD_HEADER ./simd/*.h) + +source_group("Text Files" FILES ${ROOT_TEXT} ${ROOT_MD}) +source_group("Core Files" FILES ${CORE_SOURCE}) +source_group("Core Files" FILES ${CORE_INLINE}) +source_group("Core Files" FILES ${CORE_HEADER}) +source_group("EXT Files" FILES ${EXT_SOURCE}) +source_group("EXT Files" FILES ${EXT_INLINE}) +source_group("EXT Files" FILES ${EXT_HEADER}) +source_group("GTC Files" FILES ${GTC_SOURCE}) +source_group("GTC Files" FILES ${GTC_INLINE}) +source_group("GTC Files" FILES ${GTC_HEADER}) +source_group("GTX Files" FILES ${GTX_SOURCE}) +source_group("GTX Files" FILES ${GTX_INLINE}) +source_group("GTX Files" FILES ${GTX_HEADER}) +source_group("SIMD Files" FILES ${SIMD_SOURCE}) +source_group("SIMD Files" FILES ${SIMD_INLINE}) +source_group("SIMD Files" FILES ${SIMD_HEADER}) + +add_library(glm INTERFACE) +target_include_directories(glm INTERFACE ../) + +if(BUILD_STATIC_LIBS) +add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} + ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} + ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER} + ${EXT_SOURCE} ${EXT_INLINE} ${EXT_HEADER} + ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER} + ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER} + ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER}) + target_link_libraries(glm_static PUBLIC glm) + add_library(glm::glm_static ALIAS glm_static) +endif() + +if(BUILD_SHARED_LIBS) +add_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} + ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} + ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER} + ${EXT_SOURCE} ${EXT_INLINE} ${EXT_HEADER} + ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER} + ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER} + ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER}) + target_link_libraries(glm_shared PUBLIC glm) + add_library(glm::glm_shared ALIAS glm_shared) +endif() Property changes on: brlcad/trunk/src/qged/display/glm/glm/CMakeLists.txt ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/glm/common.hpp =================================================================== --- brlcad/trunk/src/qged/display/glm/glm/common.hpp (rev 0) +++ brlcad/trunk/src/qged/display/glm/glm/common.hpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,539 @@ +/// @ref core +/// @file glm/common.hpp +/// +/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> +/// +/// @defgroup core_func_common Common functions +/// @ingroup core +/// +/// Provides GLSL common functions +/// +/// These all operate component-wise. The description is per component. +/// +/// Include <glm/common.hpp> to use these core features. + +#pragma once + +#include "detail/qualifier.hpp" +#include "detail/_fixes.hpp" + +namespace glm +{ + /// @addtogroup core_func_common + /// @{ + + /// Returns x if x >= 0; otherwise, it returns -x. + /// + /// @tparam genType floating-point or signed integer; scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x); + + /// Returns x if x >= 0; otherwise, it returns -x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point or signed integer scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x); + + /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> sign(vec<L, T, Q> const& x); + + /// Returns a value equal to the nearest integer that is less then or equal to x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> floor(vec<L, T, Q> const& x); + + /// Returns a value equal to the nearest integer to x + /// whose absolute value is not larger than the absolute value of x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> trunc(vec<L, T, Q> const& x); + + /// Returns a value equal to the nearest integer to x. + /// The fraction 0.5 will round in a direction chosen by the + /// implementation, presumably the direction that is fastest. + /// This includes the possibility that round(x) returns the + /// same value as roundEven(x) for all values of x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> round(vec<L, T, Q> const& x); + + /// Returns a value equal to the nearest integer to x. + /// A fractional part of 0.5 will round toward the nearest even + /// integer. (Both 3.5 and 4.5 for x will return 4.0.) + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + /// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> roundEven(vec<L, T, Q> const& x); + + /// Returns a value equal to the nearest integer + /// that is greater than or equal to x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> ceil(vec<L, T, Q> const& x); + + /// Return x - floor(x). + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL genType fract(genType x); + + /// Return x - floor(x). + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> fract(vec<L, T, Q> const& x); + + template<typename genType> + GLM_FUNC_DECL genType mod(genType x, genType y); + + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, T y); + + /// Modulus. Returns x - y * floor(x / y) + /// for each component in x using the floating point value y. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y); + + /// Returns the fractional part of x and sets i to the integer + /// part (as a whole number floating point value). Both the + /// return value and the output parameter will have the same + /// sign as x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL genType modf(genType x, genType& i); + + /// Returns y if y < x; otherwise, it returns x. + /// + /// @tparam genType Floating-point or integer; scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y); + + /// Returns y if y < x; otherwise, it returns x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point or integer scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, T y); + + /// Returns y if y < x; otherwise, it returns x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point or integer scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y); + + /// Returns y if x < y; otherwise, it returns x. + /// + /// @tparam genType Floating-point or integer; scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y); + + /// Returns y if x < y; otherwise, it returns x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point or integer scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, T y); + + /// Returns y if x < y; otherwise, it returns x. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point or integer scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y); + + /// Returns min(max(x, minVal), maxVal) for each component in x + /// using the floating-point values minVal and maxVal. + /// + /// @tparam genType Floating-point or integer; scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal); + + /// Returns min(max(x, minVal), maxVal) for each component in x + /// using the floating-point values minVal and maxVal. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point or integer scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal); + + /// Returns min(max(x, minVal), maxVal) for each component in x + /// using the floating-point values minVal and maxVal. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point or integer scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal); + + /// If genTypeU is a floating scalar or vector: + /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of + /// x and y using the floating-point value a. + /// The value for a is not restricted to the range [0, 1]. + /// + /// If genTypeU is a boolean scalar or vector: + /// Selects which vector each returned component comes + /// from. For a component of 'a' that is false, the + /// corresponding component of 'x' is returned. For a + /// component of 'a' that is true, the corresponding + /// component of 'y' is returned. Components of 'x' and 'y' that + /// are not selected are allowed to be invalid floating point + /// values and will have no effect on the results. Thus, this + /// provides different functionality than + /// genType mix(genType x, genType y, genType(a)) + /// where a is a Boolean vector. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + /// + /// @param[in] x Value to interpolate. + /// @param[in] y Value to interpolate. + /// @param[in] a Interpolant. + /// + /// @tparam genTypeT Floating point scalar or vector. + /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. + /// + /// @code + /// #include <glm/glm.hpp> + /// ... + /// float a; + /// bool b; + /// glm::dvec3 e; + /// glm::dvec3 f; + /// glm::vec4 g; + /// glm::vec4 h; + /// ... + /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. + /// glm::vec4 s = glm::mix(g, h, b); // Returns g or h; + /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. + /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. + /// @endcode + template<typename genTypeT, typename genTypeU> + GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a); + + template<length_t L, typename T, typename U, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a); + + template<length_t L, typename T, typename U, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a); + + /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL genType step(genType edge, genType x); + + /// Returns 0.0 if x < edge, otherwise it returns 1.0. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> step(T edge, vec<L, T, Q> const& x); + + /// Returns 0.0 if x < edge, otherwise it returns 1.0. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x); + + /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and + /// performs smooth Hermite interpolation between 0 and 1 + /// when edge0 < x < edge1. This is useful in cases where + /// you would want a threshold function with a smooth + /// transition. This is equivalent to: + /// genType t; + /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); + /// return t * t * (3 - 2 * t); + /// Results are undefined if edge0 >= edge1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x); + + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x); + + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x); + + /// Returns true if x holds a NaN (not a number) + /// representation in the underlying implementation's set of + /// floating point representations. Returns false otherwise, + /// including for implementations with no NaN + /// representations. + /// + /// /!\ When using compiler fast math, this function may fail. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, bool, Q> isnan(vec<L, T, Q> const& x); + + /// Returns true if x holds a positive infinity or negative + /// infinity representation in the underlying implementation's + /// set of floating point representations. Returns false + /// otherwise, including for implementations with no infinity + /// representations. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam T Floating-point scalar types + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, bool, Q> isinf(vec<L, T, Q> const& x); + + /// Returns a signed integer value representing + /// the encoding of a floating-point value. The floating-point + /// value's bit-level representation is preserved. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + GLM_FUNC_DECL int floatBitsToInt(float const& v); + + /// Returns a signed integer value representing + /// the encoding of a floating-point value. The floatingpoint + /// value's bit-level representation is preserved. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, qualifier Q> + GLM_FUNC_DECL vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v); + + /// Returns a unsigned integer value representing + /// the encoding of a floating-point value. The floatingpoint + /// value's bit-level representation is preserved. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + GLM_FUNC_DECL uint floatBitsToUint(float const& v); + + /// Returns a unsigned integer value representing + /// the encoding of a floating-point value. The floatingpoint + /// value's bit-level representation is preserved. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, qualifier Q> + GLM_FUNC_DECL vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v); + + /// Returns a floating-point value corresponding to a signed + /// integer encoding of a floating-point value. + /// If an inf or NaN is passed in, it will not signal, and the + /// resulting floating point value is unspecified. Otherwise, + /// the bit-level representation is preserved. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + GLM_FUNC_DECL float intBitsToFloat(int const& v); + + /// Returns a floating-point value corresponding to a signed + /// integer encoding of a floating-point value. + /// If an inf or NaN is passed in, it will not signal, and the + /// resulting floating point value is unspecified. Otherwise, + /// the bit-level representation is preserved. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, qualifier Q> + GLM_FUNC_DECL vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v); + + /// Returns a floating-point value corresponding to a + /// unsigned integer encoding of a floating-point value. + /// If an inf or NaN is passed in, it will not signal, and the + /// resulting floating point value is unspecified. Otherwise, + /// the bit-level representation is preserved. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + GLM_FUNC_DECL float uintBitsToFloat(uint const& v); + + /// Returns a floating-point value corresponding to a + /// unsigned integer encoding of a floating-point value. + /// If an inf or NaN is passed in, it will not signal, and the + /// resulting floating point value is unspecified. Otherwise, + /// the bit-level representation is preserved. + /// + /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector + /// @tparam Q Value from qualifier enum + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<length_t L, qualifier Q> + GLM_FUNC_DECL vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v); + + /// Computes and returns a * b + c. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c); + + /// Splits x into a floating-point significand in the range + /// [0.5, 1.0) and an integral exponent of two, such that: + /// x = significand * exp(2, exponent) + /// + /// The significand is returned by the function and the + /// exponent is returned in the parameter exp. For a + /// floating-point value of zero, the significant and exponent + /// are both zero. For a floating-point value that is an + /// infinity or is not a number, the results are undefined. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a> + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL genType frexp(genType x, int& exp); + + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp); + + /// Builds a floating-point number from x and the + /// corresponding integral exponent of two in exp, returning: + /// significand * exp(2, exponent) + /// + /// If this product is too large to be represented in the + /// floating-point type, the result is undefined. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>; + /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> + template<typename genType> + GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp); + + template<length_t L, typename T, qualifier Q> + GLM_FUNC_DECL vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp); + + /// @} +}//namespace glm + +#include "detail/func_common.inl" + Property changes on: brlcad/trunk/src/qged/display/glm/glm/common.hpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/glm/detail/_features.hpp =================================================================== --- brlcad/trunk/src/qged/display/glm/glm/detail/_features.hpp (rev 0) +++ brlcad/trunk/src/qged/display/glm/glm/detail/_features.hpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,394 @@ +#pragma once + +// #define GLM_CXX98_EXCEPTIONS +// #define GLM_CXX98_RTTI + +// #define GLM_CXX11_RVALUE_REFERENCES +// Rvalue references - GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html + +// GLM_CXX11_TRAILING_RETURN +// Rvalue references for *this - GCC not supported +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm + +// GLM_CXX11_NONSTATIC_MEMBER_INIT +// Initialization of class objects by rvalues - GCC any +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html + +// GLM_CXX11_NONSTATIC_MEMBER_INIT +// Non-static data member initializers - GCC 4.7 +// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm + +// #define GLM_CXX11_VARIADIC_TEMPLATE +// Variadic templates - GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf + +// +// Extending variadic template template parameters - GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf + +// #define GLM_CXX11_GENERALIZED_INITIALIZERS +// Initializer lists - GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm + +// #define GLM_CXX11_STATIC_ASSERT +// Static assertions - GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html + +// #define GLM_CXX11_AUTO_TYPE +// auto-typed variables - GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf + +// #define GLM_CXX11_AUTO_TYPE +// Multi-declarator auto - GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf + +// #define GLM_CXX11_AUTO_TYPE +// Removal of auto as a storage-class specifier - GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm + +// #define GLM_CXX11_AUTO_TYPE +// New function declarator syntax - GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm + +// #define GLM_CXX11_LAMBDAS +// New wording for C++0x lambdas - GCC 4.5 +// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf + +// #define GLM_CXX11_DECLTYPE +// Declared type of an expression - GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf + +// +// Right angle brackets - GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html + +// +// Default template arguments for function templates DR226 GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226 + +// +// Solving the SFINAE problem for expressions DR339 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html + +// #define GLM_CXX11_ALIAS_TEMPLATE +// Template aliases N2258 GCC 4.7 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf + +// +// Extern templates N1987 Yes +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm + +// #define GLM_CXX11_NULLPTR +// Null pointer constant N2431 GCC 4.6 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf + +// #define GLM_CXX11_STRONG_ENUMS +// Strongly-typed enums N2347 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf + +// +// Forward declarations for enums N2764 GCC 4.6 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf + +// +// Generalized attributes N2761 GCC 4.8 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf + +// +// Generalized constant expressions N2235 GCC 4.6 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf + +// +// Alignment support N2341 GCC 4.8 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf + +// #define GLM_CXX11_DELEGATING_CONSTRUCTORS +// Delegating constructors N1986 GCC 4.7 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf + +// +// Inheriting constructors N2540 GCC 4.8 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm + +// #define GLM_CXX11_EXPLICIT_CONVERSIONS +// Explicit conversion operators N2437 GCC 4.5 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf + +// +// New character types N2249 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html + +// +// Unicode string literals N2442 GCC 4.5 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm + +// +// Raw string literals N2442 GCC 4.5 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm + +// +// Universal character name literals N2170 GCC 4.5 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html + +// #define GLM_CXX11_USER_LITERALS +// User-defined literals N2765 GCC 4.7 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf + +// +// Standard Layout Types N2342 GCC 4.5 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm + +// #define GLM_CXX11_DEFAULTED_FUNCTIONS +// #define GLM_CXX11_DELETED_FUNCTIONS +// Defaulted and deleted functions N2346 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm + +// +// Extended friend declarations N1791 GCC 4.7 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf + +// +// Extending sizeof N2253 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html + +// #define GLM_CXX11_INLINE_NAMESPACES +// Inline namespaces N2535 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm + +// #define GLM_CXX11_UNRESTRICTED_UNIONS +// Unrestricted unions N2544 GCC 4.6 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf + +// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS +// Local and unnamed types as template arguments N2657 GCC 4.5 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm + +// #define GLM_CXX11_RANGE_FOR +// Range-based for N2930 GCC 4.6 +// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html + +// #define GLM_CXX11_OVERRIDE_CONTROL +// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7 +// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm + +// +// Minimal support for garbage collection and reachability-based leak detection N2670 No +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm + +// #define GLM_CXX11_NOEXCEPT +// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only) +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html + +// +// Defining move special member functions N3053 GCC 4.6 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html + +// +// Sequence points N2239 Yes +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html + +// +// Atomic operations N2427 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html + +// +// Strong Compare and Exchange N2748 GCC 4.5 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html + +// +// Bidirectional Fences N2752 GCC 4.8 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm + +// +// Memory model N2429 GCC 4.8 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm + +// +// Data-dependency ordering: atomics and memory model N2664 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm + +// +// Propagating exceptions N2179 GCC 4.4 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html + +// +// Abandoning a process and at_quick_exit N2440 GCC 4.8 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm + +// +// Allow atomics use in signal handlers N2547 Yes +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm + +// +// Thread-local storage N2659 GCC 4.8 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm + +// +// Dynamic initialization and destruction with concurrency N2660 GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm + +// +// __func__ predefined identifier N2340 GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm + +// +// C99 preprocessor N1653 GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm + +// +// long long N1811 GCC 4.3 +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf + +// +// Extended integral types N1988 Yes +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf + +#if(GLM_COMPILER & GLM_COMPILER_GCC) + +# define GLM_CXX11_STATIC_ASSERT + +#elif(GLM_COMPILER & GLM_COMPILER_CLANG) +# if(__has_feature(cxx_exceptions)) +# define GLM_CXX98_EXCEPTIONS +# endif + +# if(__has_feature(cxx_rtti)) +# define GLM_CXX98_RTTI +# endif + +# if(__has_feature(cxx_access_control_sfinae)) +# define GLM_CXX11_ACCESS_CONTROL_SFINAE +# endif + +# if(__has_feature(cxx_alias_templates)) +# define GLM_CXX11_ALIAS_TEMPLATE +# endif + +# if(__has_feature(cxx_alignas)) +# define GLM_CXX11_ALIGNAS +# endif + +# if(__has_feature(cxx_attributes)) +# define GLM_CXX11_ATTRIBUTES +# endif + +# if(__has_feature(cxx_constexpr)) +# define GLM_CXX11_CONSTEXPR +# endif + +# if(__has_feature(cxx_decltype)) +# define GLM_CXX11_DECLTYPE +# endif + +# if(__has_feature(cxx_default_function_template_args)) +# define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS +# endif + +# if(__has_feature(cxx_defaulted_functions)) +# define GLM_CXX11_DEFAULTED_FUNCTIONS +# endif + +# if(__has_feature(cxx_delegating_constructors)) +# define GLM_CXX11_DELEGATING_CONSTRUCTORS +# endif + +# if(__has_feature(cxx_deleted_functions)) +# define GLM_CXX11_DELETED_FUNCTIONS +# endif + +# if(__has_feature(cxx_explicit_conversions)) +# define GLM_CXX11_EXPLICIT_CONVERSIONS +# endif + +# if(__has_feature(cxx_generalized_initializers)) +# define GLM_CXX11_GENERALIZED_INITIALIZERS +# endif + +# if(__has_feature(cxx_implicit_moves)) +# define GLM_CXX11_IMPLICIT_MOVES +# endif + +# if(__has_feature(cxx_inheriting_constructors)) +# define GLM_CXX11_INHERITING_CONSTRUCTORS +# endif + +# if(__has_feature(cxx_inline_namespaces)) +# define GLM_CXX11_INLINE_NAMESPACES +# endif + +# if(__has_feature(cxx_lambdas)) +# define GLM_CXX11_LAMBDAS +# endif + +# if(__has_feature(cxx_local_type_template_args)) +# define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS +# endif + +# if(__has_feature(cxx_noexcept)) +# define GLM_CXX11_NOEXCEPT +# endif + +# if(__has_feature(cxx_nonstatic_member_init)) +# define GLM_CXX11_NONSTATIC_MEMBER_INIT +# endif + +# if(__has_feature(cxx_nullptr)) +# define GLM_CXX11_NULLPTR +# endif + +# if(__has_feature(cxx_override_control)) +# define GLM_CXX11_OVERRIDE_CONTROL +# endif + +# if(__has_feature(cxx_reference_qualified_functions)) +# define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS +# endif + +# if(__has_feature(cxx_range_for)) +# define GLM_CXX11_RANGE_FOR +# endif + +# if(__has_feature(cxx_raw_string_literals)) +# define GLM_CXX11_RAW_STRING_LITERALS +# endif + +# if(__has_feature(cxx_rvalue_references)) +# define GLM_CXX11_RVALUE_REFERENCES +# endif + +# if(__has_feature(cxx_static_assert)) +# define GLM_CXX11_STATIC_ASSERT +# endif + +# if(__has_feature(cxx_auto_type)) +# define GLM_CXX11_AUTO_TYPE +# endif + +# if(__has_feature(cxx_strong_enums)) +# define GLM_CXX11_STRONG_ENUMS +# endif + +# if(__has_feature(cxx_trailing_return)) +# define GLM_CXX11_TRAILING_RETURN +# endif + +# if(__has_feature(cxx_unicode_literals)) +# define GLM_CXX11_UNICODE_LITERALS +# endif + +# if(__has_feature(cxx_unrestricted_unions)) +# define GLM_CXX11_UNRESTRICTED_UNIONS +# endif + +# if(__has_feature(cxx_user_literals)) +# define GLM_CXX11_USER_LITERALS +# endif + +# if(__has_feature(cxx_variadic_templates)) +# define GLM_CXX11_VARIADIC_TEMPLATES +# endif + +#endif//(GLM_COMPILER & GLM_COMPILER_CLANG) Property changes on: brlcad/trunk/src/qged/display/glm/glm/detail/_features.hpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/glm/detail/_fixes.hpp =================================================================== --- brlcad/trunk/src/qged/display/glm/glm/detail/_fixes.hpp (rev 0) +++ brlcad/trunk/src/qged/display/glm/glm/detail/_fixes.hpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,27 @@ +#include <cmath> + +//! Workaround for compatibility with other libraries +#ifdef max +#undef max +#endif + +//! Workaround for compatibility with other libraries +#ifdef min +#undef min +#endif + +//! Workaround for Android +#ifdef isnan +#undef isnan +#endif + +//! Workaround for Android +#ifdef isinf +#undef isinf +#endif + +//! Workaround for Chrone Native Client +#ifdef log2 +#undef log2 +#endif + Property changes on: brlcad/trunk/src/qged/display/glm/glm/detail/_fixes.hpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: brlcad/trunk/src/qged/display/glm/glm/detail/_noise.hpp =================================================================== --- brlcad/trunk/src/qged/display/glm/glm/detail/_noise.hpp (rev 0) +++ brlcad/trunk/src/qged/display/glm/glm/detail/_noise.hpp 2020-06-29 13:53:57 UTC (rev 76234) @@ -0,0 +1,81 @@ +#pragma once + +#include "../common.hpp" + +namespace glm{ +namespace detail +{ + template<typename T> + GLM_FUNC_QUALIFIER T mod289(T const& x) + { + return x - floor(x * (static_cast<T>(1.0) / static_cast<T>(289.0))) * static_cast<T>(289.0); + } + + template<typename T> + GLM_FUNC_QUALIFIER T permute(T const& x) + { + return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x); + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x) + { + return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x); + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x) + { + return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x); + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x) + { + return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x); + } + + template<typename T> + GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r) + { + return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r; + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r) + { + return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r; + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r) + { + return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r; + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r) + { + return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r; + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t) + { + return (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10)); + } + @@ Diff output truncated at 100000 characters. @@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits