From f1fe73d1909a2448a004a88362a1a532d0d4f7c3 Mon Sep 17 00:00:00 2001 From: sanine Date: Sun, 12 Feb 2023 23:53:22 -0600 Subject: switch to tinyobj and nanovg from assimp and cairo --- libs/assimp/contrib/draco/.clang-format | 5 - libs/assimp/contrib/draco/.cmake-format.py | 102 -- libs/assimp/contrib/draco/AUTHORS | 7 - libs/assimp/contrib/draco/BUILDING.md | 301 ----- libs/assimp/contrib/draco/CMAKE.md | 106 -- libs/assimp/contrib/draco/CMakeLists.txt | 952 --------------- libs/assimp/contrib/draco/CONTRIBUTING.md | 27 - libs/assimp/contrib/draco/LICENSE | 252 ---- libs/assimp/contrib/draco/README.md | 478 -------- libs/assimp/contrib/draco/cmake/DracoConfig.cmake | 3 - libs/assimp/contrib/draco/cmake/FindDraco.cmake | 56 - .../contrib/draco/cmake/compiler_flags.cmake | 220 ---- .../contrib/draco/cmake/compiler_tests.cmake | 103 -- .../draco/cmake/draco-config.cmake.template | 2 - libs/assimp/contrib/draco/cmake/draco.pc.template | 11 - .../draco/cmake/draco_build_definitions.cmake | 124 -- .../contrib/draco/cmake/draco_cpu_detection.cmake | 28 - .../contrib/draco/cmake/draco_emscripten.cmake | 185 --- libs/assimp/contrib/draco/cmake/draco_flags.cmake | 247 ---- .../assimp/contrib/draco/cmake/draco_helpers.cmake | 110 -- .../assimp/contrib/draco/cmake/draco_install.cmake | 79 -- .../contrib/draco/cmake/draco_intrinsics.cmake | 96 -- .../assimp/contrib/draco/cmake/draco_options.cmake | 239 ---- .../contrib/draco/cmake/draco_sanitizer.cmake | 32 - .../assimp/contrib/draco/cmake/draco_targets.cmake | 355 ------ .../contrib/draco/cmake/draco_test_config.h.cmake | 13 - libs/assimp/contrib/draco/cmake/draco_tests.cmake | 133 --- .../contrib/draco/cmake/draco_variables.cmake | 64 - libs/assimp/contrib/draco/cmake/sanitizers.cmake | 19 - .../draco/cmake/toolchains/aarch64-linux-gnu.cmake | 14 - .../cmake/toolchains/android-ndk-common.cmake | 23 - .../contrib/draco/cmake/toolchains/android.cmake | 39 - .../draco/cmake/toolchains/arm-ios-common.cmake | 17 - .../cmake/toolchains/arm-linux-gnueabihf.cmake | 15 - .../toolchains/arm64-android-ndk-libcpp.cmake | 16 - .../contrib/draco/cmake/toolchains/arm64-ios.cmake | 14 - .../draco/cmake/toolchains/arm64-linux-gcc.cmake | 18 - .../toolchains/armv7-android-ndk-libcpp.cmake | 16 - .../contrib/draco/cmake/toolchains/armv7-ios.cmake | 14 - .../draco/cmake/toolchains/armv7-linux-gcc.cmake | 24 - .../draco/cmake/toolchains/armv7s-ios.cmake | 14 - .../contrib/draco/cmake/toolchains/i386-ios.cmake | 15 - .../cmake/toolchains/x86-android-ndk-libcpp.cmake | 16 - .../toolchains/x86_64-android-ndk-libcpp.cmake | 16 - .../draco/cmake/toolchains/x86_64-ios.cmake | 15 - libs/assimp/contrib/draco/cmake/util.cmake | 79 -- .../src/draco/animation/keyframe_animation.cc | 54 - .../draco/src/draco/animation/keyframe_animation.h | 107 -- .../draco/animation/keyframe_animation_decoder.cc | 30 - .../draco/animation/keyframe_animation_decoder.h | 34 - .../draco/animation/keyframe_animation_encoder.cc | 28 - .../draco/animation/keyframe_animation_encoder.h | 39 - .../animation/keyframe_animation_encoding_test.cc | 168 --- .../src/draco/animation/keyframe_animation_test.cc | 102 -- .../attributes/attribute_octahedron_transform.cc | 145 --- .../attributes/attribute_octahedron_transform.h | 81 -- .../attributes/attribute_quantization_transform.cc | 260 ----- .../attributes/attribute_quantization_transform.h | 102 -- .../src/draco/attributes/attribute_transform.cc | 40 - .../src/draco/attributes/attribute_transform.h | 76 -- .../draco/attributes/attribute_transform_data.h | 71 -- .../draco/attributes/attribute_transform_type.h | 30 - .../src/draco/attributes/geometry_attribute.cc | 102 -- .../src/draco/attributes/geometry_attribute.h | 350 ------ .../draco/src/draco/attributes/geometry_indices.h | 54 - .../draco/src/draco/attributes/point_attribute.cc | 225 ---- .../draco/src/draco/attributes/point_attribute.h | 190 --- .../src/draco/attributes/point_attribute_test.cc | 128 -- .../compression/attributes/attributes_decoder.cc | 127 -- .../compression/attributes/attributes_decoder.h | 97 -- .../attributes/attributes_decoder_interface.h | 62 - .../compression/attributes/attributes_encoder.cc | 49 - .../compression/attributes/attributes_encoder.h | 154 --- .../attributes/kd_tree_attributes_decoder.cc | 556 --------- .../attributes/kd_tree_attributes_decoder.h | 46 - .../attributes/kd_tree_attributes_encoder.cc | 305 ----- .../attributes/kd_tree_attributes_encoder.h | 51 - .../attributes/kd_tree_attributes_shared.h | 28 - .../compression/attributes/linear_sequencer.h | 51 - .../mesh_attribute_indices_encoding_data.h | 58 - .../attributes/normal_compression_utils.h | 360 ------ .../draco/compression/attributes/point_d_vector.h | 279 ----- .../compression/attributes/point_d_vector_test.cc | 360 ------ .../compression/attributes/points_sequencer.h | 63 - ...cheme_constrained_multi_parallelogram_decoder.h | 231 ---- ...cheme_constrained_multi_parallelogram_encoder.h | 414 ------- ...scheme_constrained_multi_parallelogram_shared.h | 34 - .../mesh_prediction_scheme_data.h | 72 -- .../mesh_prediction_scheme_decoder.h | 46 - .../mesh_prediction_scheme_encoder.h | 46 - ...sh_prediction_scheme_geometric_normal_decoder.h | 172 --- ...sh_prediction_scheme_geometric_normal_encoder.h | 180 --- ...iction_scheme_geometric_normal_predictor_area.h | 117 -- ...iction_scheme_geometric_normal_predictor_base.h | 96 -- ...prediction_scheme_multi_parallelogram_decoder.h | 126 -- ...prediction_scheme_multi_parallelogram_encoder.h | 133 --- .../mesh_prediction_scheme_parallelogram_decoder.h | 98 -- .../mesh_prediction_scheme_parallelogram_encoder.h | 111 -- .../mesh_prediction_scheme_parallelogram_shared.h | 78 -- .../mesh_prediction_scheme_tex_coords_decoder.h | 344 ------ .../mesh_prediction_scheme_tex_coords_encoder.h | 318 ----- ...prediction_scheme_tex_coords_portable_decoder.h | 143 --- ...prediction_scheme_tex_coords_portable_encoder.h | 133 --- ...ediction_scheme_tex_coords_portable_predictor.h | 263 ----- .../prediction_schemes/prediction_scheme_decoder.h | 90 -- .../prediction_scheme_decoder_factory.h | 194 --- .../prediction_scheme_decoder_interface.h | 53 - .../prediction_scheme_decoding_transform.h | 65 -- .../prediction_scheme_delta_decoder.h | 65 -- .../prediction_scheme_delta_encoder.h | 69 -- .../prediction_schemes/prediction_scheme_encoder.h | 90 -- .../prediction_scheme_encoder_factory.cc | 85 -- .../prediction_scheme_encoder_factory.h | 129 -- .../prediction_scheme_encoder_interface.h | 55 - .../prediction_scheme_encoding_transform.h | 77 -- .../prediction_schemes/prediction_scheme_factory.h | 85 -- .../prediction_scheme_interface.h | 60 - ...l_octahedron_canonicalized_decoding_transform.h | 118 -- ...l_octahedron_canonicalized_encoding_transform.h | 116 -- ...ormal_octahedron_canonicalized_transform_base.h | 102 -- ...rmal_octahedron_canonicalized_transform_test.cc | 192 --- ...n_scheme_normal_octahedron_decoding_transform.h | 103 -- ...n_scheme_normal_octahedron_encoding_transform.h | 105 -- ...ction_scheme_normal_octahedron_transform_base.h | 90 -- ...tion_scheme_normal_octahedron_transform_test.cc | 71 -- .../prediction_scheme_wrap_decoding_transform.h | 88 -- .../prediction_scheme_wrap_encoding_transform.h | 81 -- .../prediction_scheme_wrap_transform_base.h | 120 -- .../attributes/sequential_attribute_decoder.cc | 118 -- .../attributes/sequential_attribute_decoder.h | 86 -- .../sequential_attribute_decoders_controller.cc | 149 --- .../sequential_attribute_decoders_controller.h | 61 - .../attributes/sequential_attribute_encoder.cc | 108 -- .../attributes/sequential_attribute_encoder.h | 134 --- .../sequential_attribute_encoders_controller.cc | 159 --- .../sequential_attribute_encoders_controller.h | 115 -- .../sequential_integer_attribute_decoder.cc | 240 ---- .../sequential_integer_attribute_decoder.h | 76 -- .../sequential_integer_attribute_encoder.cc | 233 ---- .../sequential_integer_attribute_encoder.h | 67 -- .../sequential_integer_attribute_encoding_test.cc | 64 - .../sequential_normal_attribute_decoder.cc | 76 -- .../sequential_normal_attribute_decoder.h | 83 -- .../sequential_normal_attribute_encoder.cc | 57 - .../sequential_normal_attribute_encoder.h | 82 -- .../sequential_quantization_attribute_decoder.cc | 88 -- .../sequential_quantization_attribute_decoder.h | 52 - .../sequential_quantization_attribute_encoder.cc | 86 -- .../sequential_quantization_attribute_encoder.h | 52 - .../bit_coders/adaptive_rans_bit_coding_shared.h | 43 - .../bit_coders/adaptive_rans_bit_decoder.cc | 70 -- .../bit_coders/adaptive_rans_bit_decoder.h | 54 - .../bit_coders/adaptive_rans_bit_encoder.cc | 59 - .../bit_coders/adaptive_rans_bit_encoder.h | 61 - .../compression/bit_coders/direct_bit_decoder.cc | 54 - .../compression/bit_coders/direct_bit_decoder.h | 90 -- .../compression/bit_coders/direct_bit_encoder.cc | 39 - .../compression/bit_coders/direct_bit_encoder.h | 89 -- .../bit_coders/folded_integer_bit_decoder.h | 77 -- .../bit_coders/folded_integer_bit_encoder.h | 82 -- .../compression/bit_coders/rans_bit_decoder.cc | 82 -- .../compression/bit_coders/rans_bit_decoder.h | 55 - .../compression/bit_coders/rans_bit_encoder.cc | 125 -- .../compression/bit_coders/rans_bit_encoder.h | 57 - .../compression/bit_coders/rans_coding_test.cc | 9 - .../compression/bit_coders/symbol_bit_decoder.cc | 49 - .../compression/bit_coders/symbol_bit_decoder.h | 36 - .../compression/bit_coders/symbol_bit_encoder.cc | 30 - .../compression/bit_coders/symbol_bit_encoder.h | 36 - .../draco/compression/config/compression_shared.h | 155 --- .../src/draco/compression/config/decoder_options.h | 34 - .../compression/config/decoder_options_test.cc | 67 -- .../src/draco/compression/config/draco_options.h | 249 ---- .../src/draco/compression/config/encoder_options.h | 97 -- .../draco/compression/config/encoding_features.h | 39 - .../contrib/draco/src/draco/compression/decode.cc | 135 --- .../contrib/draco/src/draco/compression/decode.h | 80 -- .../draco/src/draco/compression/decode_test.cc | 169 --- .../contrib/draco/src/draco/compression/encode.cc | 96 -- .../contrib/draco/src/draco/compression/encode.h | 140 --- .../draco/src/draco/compression/encode_base.h | 131 --- .../draco/src/draco/compression/encode_test.cc | 407 ------- .../draco/src/draco/compression/entropy/ans.h | 527 --------- .../draco/compression/entropy/rans_symbol_coding.h | 53 - .../compression/entropy/rans_symbol_decoder.h | 164 --- .../compression/entropy/rans_symbol_encoder.h | 290 ----- .../draco/compression/entropy/shannon_entropy.cc | 147 --- .../draco/compression/entropy/shannon_entropy.h | 110 -- .../compression/entropy/shannon_entropy_test.cc | 58 - .../compression/entropy/symbol_coding_test.cc | 170 --- .../draco/compression/entropy/symbol_decoding.cc | 181 --- .../draco/compression/entropy/symbol_decoding.h | 29 - .../draco/compression/entropy/symbol_encoding.cc | 376 ------ .../draco/compression/entropy/symbol_encoding.h | 47 - .../draco/src/draco/compression/expert_encode.cc | 182 --- .../draco/src/draco/compression/expert_encode.h | 147 --- .../src/draco/compression/mesh/mesh_decoder.cc | 37 - .../src/draco/compression/mesh/mesh_decoder.h | 68 -- .../compression/mesh/mesh_edgebreaker_decoder.cc | 70 -- .../compression/mesh/mesh_edgebreaker_decoder.h | 54 - .../mesh/mesh_edgebreaker_decoder_impl.cc | 1231 -------------------- .../mesh/mesh_edgebreaker_decoder_impl.h | 228 ---- .../mesh/mesh_edgebreaker_decoder_impl_interface.h | 47 - .../compression/mesh/mesh_edgebreaker_encoder.cc | 195 ---- .../compression/mesh/mesh_edgebreaker_encoder.h | 73 -- .../mesh/mesh_edgebreaker_encoder_impl.cc | 854 -------------- .../mesh/mesh_edgebreaker_encoder_impl.h | 210 ---- .../mesh/mesh_edgebreaker_encoder_impl_interface.h | 57 - .../mesh/mesh_edgebreaker_encoding_test.cc | 247 ---- .../compression/mesh/mesh_edgebreaker_shared.h | 131 --- .../mesh/mesh_edgebreaker_traversal_decoder.h | 201 ---- .../mesh/mesh_edgebreaker_traversal_encoder.h | 139 --- ...mesh_edgebreaker_traversal_predictive_decoder.h | 134 --- ...mesh_edgebreaker_traversal_predictive_encoder.h | 172 --- .../mesh_edgebreaker_traversal_valence_decoder.h | 215 ---- .../mesh_edgebreaker_traversal_valence_encoder.h | 226 ---- .../src/draco/compression/mesh/mesh_encoder.cc | 34 - .../src/draco/compression/mesh/mesh_encoder.h | 84 -- .../draco/compression/mesh/mesh_encoder_test.cc | 116 -- .../compression/mesh/mesh_sequential_decoder.cc | 169 --- .../compression/mesh/mesh_sequential_decoder.h | 39 - .../compression/mesh/mesh_sequential_encoder.cc | 132 --- .../compression/mesh/mesh_sequential_encoder.h | 57 - .../mesh/traverser/depth_first_traverser.h | 172 --- .../traverser/max_prediction_degree_traverser.h | 226 ---- .../mesh_attribute_indices_encoding_observer.h | 76 -- .../mesh/traverser/mesh_traversal_sequencer.h | 113 -- .../compression/mesh/traverser/traverser_base.h | 87 -- .../dynamic_integer_points_kd_tree_decoder.cc | 26 - .../dynamic_integer_points_kd_tree_decoder.h | 330 ------ .../dynamic_integer_points_kd_tree_encoder.cc | 26 - .../dynamic_integer_points_kd_tree_encoder.h | 371 ------ .../algorithms/float_points_tree_decoder.cc | 152 --- .../algorithms/float_points_tree_decoder.h | 141 --- .../algorithms/float_points_tree_encoder.cc | 94 -- .../algorithms/float_points_tree_encoder.h | 126 -- .../algorithms/integer_points_kd_tree_decoder.cc | 45 - .../algorithms/integer_points_kd_tree_decoder.h | 314 ----- .../algorithms/integer_points_kd_tree_encoder.cc | 45 - .../algorithms/integer_points_kd_tree_encoder.h | 404 ------- .../algorithms/point_cloud_compression_method.h | 34 - .../point_cloud/algorithms/point_cloud_types.h | 76 -- .../point_cloud/algorithms/quantize_points_3.h | 84 -- .../point_cloud/algorithms/queuing_policy.h | 75 -- .../compression/point_cloud/point_cloud_decoder.cc | 199 ---- .../compression/point_cloud/point_cloud_decoder.h | 118 -- .../compression/point_cloud/point_cloud_encoder.cc | 306 ----- .../compression/point_cloud/point_cloud_encoder.h | 158 --- .../point_cloud/point_cloud_kd_tree_decoder.cc | 40 - .../point_cloud/point_cloud_kd_tree_decoder.h | 31 - .../point_cloud/point_cloud_kd_tree_encoder.cc | 43 - .../point_cloud/point_cloud_kd_tree_encoder.h | 45 - .../point_cloud_kd_tree_encoding_test.cc | 458 -------- .../point_cloud/point_cloud_sequential_decoder.cc | 42 - .../point_cloud/point_cloud_sequential_decoder.h | 33 - .../point_cloud/point_cloud_sequential_encoder.cc | 49 - .../point_cloud/point_cloud_sequential_encoder.h | 43 - .../point_cloud_sequential_encoding_test.cc | 92 -- .../contrib/draco/src/draco/core/bit_utils.cc | 36 - .../contrib/draco/src/draco/core/bit_utils.h | 124 -- .../contrib/draco/src/draco/core/bounding_box.cc | 30 - .../contrib/draco/src/draco/core/bounding_box.h | 72 -- .../draco/src/draco/core/buffer_bit_coding_test.cc | 115 -- .../contrib/draco/src/draco/core/cycle_timer.cc | 49 - .../contrib/draco/src/draco/core/cycle_timer.h | 51 - .../contrib/draco/src/draco/core/data_buffer.cc | 61 - .../contrib/draco/src/draco/core/data_buffer.h | 82 -- .../contrib/draco/src/draco/core/decoder_buffer.cc | 72 -- .../contrib/draco/src/draco/core/decoder_buffer.h | 216 ---- libs/assimp/contrib/draco/src/draco/core/divide.cc | 88 -- libs/assimp/contrib/draco/src/draco/core/divide.h | 42 - .../draco/src/draco/core/draco_index_type.h | 183 --- .../draco/src/draco/core/draco_index_type_vector.h | 83 -- .../contrib/draco/src/draco/core/draco_test_base.h | 11 - .../draco/src/draco/core/draco_test_utils.cc | 80 -- .../draco/src/draco/core/draco_test_utils.h | 93 -- .../contrib/draco/src/draco/core/draco_types.cc | 61 - .../contrib/draco/src/draco/core/draco_types.h | 52 - .../contrib/draco/src/draco/core/draco_version.h | 27 - .../contrib/draco/src/draco/core/encoder_buffer.cc | 93 -- .../contrib/draco/src/draco/core/encoder_buffer.h | 152 --- .../contrib/draco/src/draco/core/hash_utils.cc | 58 - .../contrib/draco/src/draco/core/hash_utils.h | 64 - libs/assimp/contrib/draco/src/draco/core/macros.h | 119 -- .../contrib/draco/src/draco/core/math_utils.h | 55 - .../draco/src/draco/core/math_utils_test.cc | 22 - .../assimp/contrib/draco/src/draco/core/options.cc | 94 -- libs/assimp/contrib/draco/src/draco/core/options.h | 150 --- .../draco/src/draco/core/quantization_utils.cc | 42 - .../draco/src/draco/core/quantization_utils.h | 82 -- .../src/draco/core/quantization_utils_test.cc | 91 -- libs/assimp/contrib/draco/src/draco/core/status.h | 77 -- .../contrib/draco/src/draco/core/status_or.h | 81 -- .../contrib/draco/src/draco/core/status_test.cc | 38 - .../contrib/draco/src/draco/core/varint_decoding.h | 81 -- .../contrib/draco/src/draco/core/varint_encoding.h | 61 - .../assimp/contrib/draco/src/draco/core/vector_d.h | 355 ------ .../contrib/draco/src/draco/core/vector_d_test.cc | 306 ----- .../draco/src/draco/io/file_reader_factory.cc | 45 - .../draco/src/draco/io/file_reader_factory.h | 34 - .../draco/src/draco/io/file_reader_factory_test.cc | 85 -- .../draco/src/draco/io/file_reader_interface.h | 32 - .../draco/src/draco/io/file_reader_test_common.h | 13 - .../contrib/draco/src/draco/io/file_utils.cc | 110 -- .../assimp/contrib/draco/src/draco/io/file_utils.h | 73 -- .../contrib/draco/src/draco/io/file_utils_test.cc | 69 -- .../draco/src/draco/io/file_writer_factory.cc | 45 - .../draco/src/draco/io/file_writer_factory.h | 34 - .../draco/src/draco/io/file_writer_factory_test.cc | 70 -- .../draco/src/draco/io/file_writer_interface.h | 26 - .../draco/src/draco/io/file_writer_utils.cc | 57 - .../contrib/draco/src/draco/io/file_writer_utils.h | 38 - libs/assimp/contrib/draco/src/draco/io/mesh_io.cc | 87 -- libs/assimp/contrib/draco/src/draco/io/mesh_io.h | 107 -- .../contrib/draco/src/draco/io/obj_decoder.cc | 708 ----------- .../contrib/draco/src/draco/io/obj_decoder.h | 129 -- .../contrib/draco/src/draco/io/obj_decoder_test.cc | 193 --- .../contrib/draco/src/draco/io/obj_encoder.cc | 346 ------ .../contrib/draco/src/draco/io/obj_encoder.h | 92 -- .../contrib/draco/src/draco/io/obj_encoder_test.cc | 110 -- .../contrib/draco/src/draco/io/parser_utils.cc | 261 ----- .../contrib/draco/src/draco/io/parser_utils.h | 66 -- .../contrib/draco/src/draco/io/ply_decoder.cc | 320 ----- .../contrib/draco/src/draco/io/ply_decoder.h | 69 -- .../contrib/draco/src/draco/io/ply_decoder_test.cc | 93 -- .../contrib/draco/src/draco/io/ply_encoder.cc | 211 ---- .../contrib/draco/src/draco/io/ply_encoder.h | 54 - .../draco/src/draco/io/ply_property_reader.h | 96 -- .../draco/src/draco/io/ply_property_writer.h | 94 -- .../contrib/draco/src/draco/io/ply_reader.cc | 312 ----- .../assimp/contrib/draco/src/draco/io/ply_reader.h | 155 --- .../contrib/draco/src/draco/io/ply_reader_test.cc | 143 --- .../contrib/draco/src/draco/io/point_cloud_io.cc | 58 - .../contrib/draco/src/draco/io/point_cloud_io.h | 89 -- .../draco/src/draco/io/point_cloud_io_test.cc | 115 -- .../draco/src/draco/io/stdio_file_reader.cc | 103 -- .../contrib/draco/src/draco/io/stdio_file_reader.h | 48 - .../draco/src/draco/io/stdio_file_reader_test.cc | 49 - .../draco/src/draco/io/stdio_file_writer.cc | 59 - .../contrib/draco/src/draco/io/stdio_file_writer.h | 42 - .../draco/src/draco/io/stdio_file_writer_test.cc | 38 - .../emscripten/animation_decoder_webidl_wrapper.cc | 101 -- .../emscripten/animation_decoder_webidl_wrapper.h | 73 -- .../emscripten/animation_encoder_webidl_wrapper.cc | 89 -- .../emscripten/animation_encoder_webidl_wrapper.h | 66 -- .../javascript/emscripten/decoder_functions.js | 33 - .../emscripten/decoder_webidl_wrapper.cc | 363 ------ .../javascript/emscripten/decoder_webidl_wrapper.h | 330 ------ .../draco_animation_decoder_glue_wrapper.cc | 28 - .../draco_animation_encoder_glue_wrapper.cc | 25 - .../emscripten/draco_animation_web_decoder.idl | 52 - .../emscripten/draco_animation_web_encoder.idl | 34 - .../emscripten/draco_decoder_glue_wrapper.cc | 28 - .../emscripten/draco_encoder_glue_wrapper.cc | 25 - .../javascript/emscripten/draco_web_decoder.idl | 283 ----- .../javascript/emscripten/draco_web_encoder.idl | 208 ---- .../emscripten/encoder_webidl_wrapper.cc | 359 ------ .../javascript/emscripten/encoder_webidl_wrapper.h | 186 --- .../src/draco/javascript/emscripten/finalize.js | 22 - .../javascript/emscripten/prepareCallbacks.js | 38 - .../src/draco/javascript/emscripten/version.js | 29 - .../draco/src/draco/maya/draco_maya_plugin.cc | 265 ----- .../draco/src/draco/maya/draco_maya_plugin.h | 81 -- .../contrib/draco/src/draco/mesh/corner_table.cc | 441 ------- .../contrib/draco/src/draco/mesh/corner_table.h | 396 ------- .../draco/src/draco/mesh/corner_table_iterators.h | 289 ----- libs/assimp/contrib/draco/src/draco/mesh/mesh.cc | 40 - libs/assimp/contrib/draco/src/draco/mesh/mesh.h | 152 --- .../draco/src/draco/mesh/mesh_are_equivalent.cc | 205 ---- .../draco/src/draco/mesh/mesh_are_equivalent.h | 71 -- .../src/draco/mesh/mesh_are_equivalent_test.cc | 98 -- .../src/draco/mesh/mesh_attribute_corner_table.cc | 211 ---- .../src/draco/mesh/mesh_attribute_corner_table.h | 196 ---- .../contrib/draco/src/draco/mesh/mesh_cleanup.cc | 251 ---- .../contrib/draco/src/draco/mesh/mesh_cleanup.h | 65 -- .../draco/src/draco/mesh/mesh_cleanup_test.cc | 192 --- .../draco/src/draco/mesh/mesh_misc_functions.cc | 63 - .../draco/src/draco/mesh/mesh_misc_functions.h | 98 -- .../draco/src/draco/mesh/mesh_stripifier.cc | 102 -- .../contrib/draco/src/draco/mesh/mesh_stripifier.h | 260 ----- .../src/draco/mesh/triangle_soup_mesh_builder.cc | 89 -- .../src/draco/mesh/triangle_soup_mesh_builder.h | 63 - .../draco/mesh/triangle_soup_mesh_builder_test.cc | 197 ---- .../contrib/draco/src/draco/mesh/valence_cache.h | 142 --- .../draco/src/draco/metadata/geometry_metadata.cc | 44 - .../draco/src/draco/metadata/geometry_metadata.h | 140 --- .../contrib/draco/src/draco/metadata/metadata.cc | 132 --- .../contrib/draco/src/draco/metadata/metadata.h | 208 ---- .../draco/src/draco/metadata/metadata_decoder.cc | 148 --- .../draco/src/draco/metadata/metadata_decoder.h | 42 - .../draco/src/draco/metadata/metadata_encoder.cc | 97 -- .../draco/src/draco/metadata/metadata_encoder.h | 41 - .../src/draco/metadata/metadata_encoder_test.cc | 167 --- .../draco/src/draco/metadata/metadata_test.cc | 157 --- .../draco/src/draco/point_cloud/point_cloud.cc | 275 ----- .../draco/src/draco/point_cloud/point_cloud.h | 244 ---- .../src/draco/point_cloud/point_cloud_builder.cc | 76 -- .../src/draco/point_cloud/point_cloud_builder.h | 80 -- .../draco/point_cloud/point_cloud_builder_test.cc | 171 --- .../src/draco/point_cloud/point_cloud_test.cc | 132 --- .../contrib/draco/src/draco/tools/draco_decoder.cc | 168 --- .../contrib/draco/src/draco/tools/draco_encoder.cc | 369 ------ .../contrib/draco/src/draco/tools/fuzz/build.sh | 35 - .../draco/tools/fuzz/draco_mesh_decoder_fuzzer.cc | 29 - ...o_mesh_decoder_without_dequantization_fuzzer.cc | 30 - .../draco/tools/fuzz/draco_pc_decoder_fuzzer.cc | 29 - ...aco_pc_decoder_without_dequantization_fuzzer.cc | 30 - .../draco/src/draco/unity/draco_unity_plugin.cc | 407 ------- .../draco/src/draco/unity/draco_unity_plugin.h | 154 --- .../src/draco/unity/draco_unity_plugin_test.cc | 243 ---- 410 files changed, 51405 deletions(-) delete mode 100644 libs/assimp/contrib/draco/.clang-format delete mode 100644 libs/assimp/contrib/draco/.cmake-format.py delete mode 100644 libs/assimp/contrib/draco/AUTHORS delete mode 100644 libs/assimp/contrib/draco/BUILDING.md delete mode 100644 libs/assimp/contrib/draco/CMAKE.md delete mode 100644 libs/assimp/contrib/draco/CMakeLists.txt delete mode 100644 libs/assimp/contrib/draco/CONTRIBUTING.md delete mode 100644 libs/assimp/contrib/draco/LICENSE delete mode 100644 libs/assimp/contrib/draco/README.md delete mode 100644 libs/assimp/contrib/draco/cmake/DracoConfig.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/FindDraco.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/compiler_flags.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/compiler_tests.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco-config.cmake.template delete mode 100644 libs/assimp/contrib/draco/cmake/draco.pc.template delete mode 100644 libs/assimp/contrib/draco/cmake/draco_build_definitions.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_cpu_detection.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_emscripten.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_flags.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_helpers.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_install.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_intrinsics.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_options.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_targets.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_test_config.h.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_tests.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/draco_variables.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/sanitizers.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/aarch64-linux-gnu.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/android-ndk-common.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/android.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/arm-ios-common.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/arm-linux-gnueabihf.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/arm64-android-ndk-libcpp.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/arm64-ios.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/arm64-linux-gcc.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/armv7-android-ndk-libcpp.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/armv7-ios.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/armv7-linux-gcc.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/armv7s-ios.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/i386-ios.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/x86-android-ndk-libcpp.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/x86_64-android-ndk-libcpp.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/toolchains/x86_64-ios.cmake delete mode 100644 libs/assimp/contrib/draco/cmake/util.cmake delete mode 100644 libs/assimp/contrib/draco/src/draco/animation/keyframe_animation.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/animation/keyframe_animation.h delete mode 100644 libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoding_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/attribute_octahedron_transform.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/attribute_octahedron_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/attribute_quantization_transform.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/attribute_quantization_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/attribute_transform.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/attribute_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/attribute_transform_data.h delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/attribute_transform_type.h delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/geometry_attribute.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/geometry_attribute.h delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/geometry_indices.h delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/point_attribute.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/point_attribute.h delete mode 100644 libs/assimp/contrib/draco/src/draco/attributes/point_attribute_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder_interface.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_shared.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/linear_sequencer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/mesh_attribute_indices_encoding_data.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/normal_compression_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/point_d_vector.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/point_d_vector_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/points_sequencer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoders_controller.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoders_controller.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoding_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/folded_integer_bit_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/folded_integer_bit_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_coding_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/config/compression_shared.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/config/decoder_options.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/config/decoder_options_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/config/draco_options.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/config/encoder_options.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/config/encoding_features.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/decode.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/decode.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/decode_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/encode.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/encode.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/encode_base.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/encode_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/ans.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_coding.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_coding_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_decoding.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_decoding.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_encoding.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_encoding.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/expert_encode.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/expert_encode.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_decoder_impl.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_decoder_impl.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_decoder_impl_interface.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_encoder_impl.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_encoder_impl.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_encoder_impl_interface.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_encoding_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_shared.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_traversal_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_traversal_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_traversal_valence_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_edgebreaker_traversal_valence_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_encoder_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_sequential_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_sequential_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_sequential_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/mesh_sequential_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/traverser/depth_first_traverser.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/traverser/max_prediction_degree_traverser.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/traverser/mesh_attribute_indices_encoding_observer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/traverser/mesh_traversal_sequencer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/mesh/traverser/traverser_base.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/float_points_tree_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/float_points_tree_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/float_points_tree_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/float_points_tree_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/integer_points_kd_tree_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/integer_points_kd_tree_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/integer_points_kd_tree_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/integer_points_kd_tree_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/point_cloud_compression_method.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/point_cloud_types.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/quantize_points_3.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/algorithms/queuing_policy.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_kd_tree_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_kd_tree_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_kd_tree_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_kd_tree_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_kd_tree_encoding_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_sequential_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_sequential_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_sequential_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_sequential_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/compression/point_cloud/point_cloud_sequential_encoding_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/bit_utils.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/bit_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/bounding_box.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/bounding_box.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/buffer_bit_coding_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/cycle_timer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/cycle_timer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/data_buffer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/data_buffer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/decoder_buffer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/decoder_buffer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/divide.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/divide.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/draco_index_type.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/draco_index_type_vector.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/draco_test_base.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/draco_test_utils.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/draco_test_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/draco_types.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/draco_types.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/draco_version.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/encoder_buffer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/encoder_buffer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/hash_utils.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/hash_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/macros.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/math_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/math_utils_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/options.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/options.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/quantization_utils.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/quantization_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/quantization_utils_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/status.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/status_or.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/status_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/core/varint_decoding.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/varint_encoding.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/vector_d.h delete mode 100644 libs/assimp/contrib/draco/src/draco/core/vector_d_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_reader_factory.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_reader_factory.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_reader_factory_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_reader_interface.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_reader_test_common.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_utils.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_utils_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_writer_factory.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_writer_factory.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_writer_factory_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_writer_interface.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_writer_utils.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/file_writer_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/mesh_io.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/mesh_io.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/obj_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/obj_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/obj_decoder_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/obj_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/obj_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/obj_encoder_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/parser_utils.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/parser_utils.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_decoder_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_property_reader.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_property_writer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_reader.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_reader.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/ply_reader_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/point_cloud_io.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/point_cloud_io.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/point_cloud_io_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/stdio_file_reader.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/stdio_file_reader.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/stdio_file_reader_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/stdio_file_writer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/io/stdio_file_writer.h delete mode 100644 libs/assimp/contrib/draco/src/draco/io/stdio_file_writer_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/animation_decoder_webidl_wrapper.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/animation_decoder_webidl_wrapper.h delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/animation_encoder_webidl_wrapper.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/animation_encoder_webidl_wrapper.h delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/decoder_functions.js delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/decoder_webidl_wrapper.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/decoder_webidl_wrapper.h delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/draco_animation_decoder_glue_wrapper.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/draco_animation_encoder_glue_wrapper.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/draco_animation_web_decoder.idl delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/draco_animation_web_encoder.idl delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/draco_decoder_glue_wrapper.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/draco_encoder_glue_wrapper.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/draco_web_decoder.idl delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/draco_web_encoder.idl delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/encoder_webidl_wrapper.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/encoder_webidl_wrapper.h delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/finalize.js delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/prepareCallbacks.js delete mode 100644 libs/assimp/contrib/draco/src/draco/javascript/emscripten/version.js delete mode 100644 libs/assimp/contrib/draco/src/draco/maya/draco_maya_plugin.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/maya/draco_maya_plugin.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/corner_table.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/corner_table.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/corner_table_iterators.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_are_equivalent.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_are_equivalent.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_are_equivalent_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_attribute_corner_table.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_attribute_corner_table.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_cleanup.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_cleanup.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_cleanup_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_misc_functions.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_misc_functions.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_stripifier.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/mesh_stripifier.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/triangle_soup_mesh_builder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/triangle_soup_mesh_builder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/triangle_soup_mesh_builder_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/mesh/valence_cache.h delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/geometry_metadata.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/geometry_metadata.h delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/metadata.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/metadata.h delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/metadata_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/metadata_decoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/metadata_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/metadata_encoder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/metadata_encoder_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/metadata/metadata_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/point_cloud/point_cloud.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/point_cloud/point_cloud.h delete mode 100644 libs/assimp/contrib/draco/src/draco/point_cloud/point_cloud_builder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/point_cloud/point_cloud_builder.h delete mode 100644 libs/assimp/contrib/draco/src/draco/point_cloud/point_cloud_builder_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/point_cloud/point_cloud_test.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/tools/draco_decoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/tools/draco_encoder.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/tools/fuzz/build.sh delete mode 100644 libs/assimp/contrib/draco/src/draco/tools/fuzz/draco_mesh_decoder_fuzzer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/tools/fuzz/draco_mesh_decoder_without_dequantization_fuzzer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/tools/fuzz/draco_pc_decoder_fuzzer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/tools/fuzz/draco_pc_decoder_without_dequantization_fuzzer.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/unity/draco_unity_plugin.cc delete mode 100644 libs/assimp/contrib/draco/src/draco/unity/draco_unity_plugin.h delete mode 100644 libs/assimp/contrib/draco/src/draco/unity/draco_unity_plugin_test.cc (limited to 'libs/assimp/contrib/draco') diff --git a/libs/assimp/contrib/draco/.clang-format b/libs/assimp/contrib/draco/.clang-format deleted file mode 100644 index 533d35e..0000000 --- a/libs/assimp/contrib/draco/.clang-format +++ /dev/null @@ -1,5 +0,0 @@ ---- -Language: Cpp -BasedOnStyle: Google -PointerAlignment: Right -... diff --git a/libs/assimp/contrib/draco/.cmake-format.py b/libs/assimp/contrib/draco/.cmake-format.py deleted file mode 100644 index 64f2495..0000000 --- a/libs/assimp/contrib/draco/.cmake-format.py +++ /dev/null @@ -1,102 +0,0 @@ -# Generated with cmake-format 0.5.1 -# How wide to allow formatted cmake files -line_width = 80 - -# How many spaces to tab for indent -tab_size = 2 - -# If arglists are longer than this, break them always -max_subargs_per_line = 10 - -# If true, separate flow control names from their parentheses with a space -separate_ctrl_name_with_space = False - -# If true, separate function names from parentheses with a space -separate_fn_name_with_space = False - -# If a statement is wrapped to more than one line, than dangle the closing -# parenthesis on its own line -dangle_parens = False - -# What character to use for bulleted lists -bullet_char = '*' - -# What character to use as punctuation after numerals in an enumerated list -enum_char = '.' - -# What style line endings to use in the output. -line_ending = u'unix' - -# Format command names consistently as 'lower' or 'upper' case -command_case = u'lower' - -# Format keywords consistently as 'lower' or 'upper' case -keyword_case = u'unchanged' - -# Specify structure for custom cmake functions -additional_commands = { - "foo": { - "flags": [ - "BAR", - "BAZ" - ], - "kwargs": { - "HEADERS": "*", - "DEPENDS": "*", - "SOURCES": "*" - } - } -} - -# A list of command names which should always be wrapped -always_wrap = [] - -# Specify the order of wrapping algorithms during successive reflow attempts -algorithm_order = [0, 1, 2, 3, 4] - -# If true, the argument lists which are known to be sortable will be sorted -# lexicographicall -autosort = False - -# enable comment markup parsing and reflow -enable_markup = True - -# If comment markup is enabled, don't reflow the first comment block in -# eachlistfile. Use this to preserve formatting of your -# copyright/licensestatements. -first_comment_is_literal = False - -# If comment markup is enabled, don't reflow any comment block which matchesthis -# (regex) pattern. Default is `None` (disabled). -literal_comment_pattern = None - -# Regular expression to match preformat fences in comments -# default=r'^\s*([`~]{3}[`~]*)(.*)$' -fence_pattern = u'^\\s*([`~]{3}[`~]*)(.*)$' - -# Regular expression to match rulers in comments -# default=r'^\s*[^\w\s]{3}.*[^\w\s]{3}$' -ruler_pattern = u'^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$' - -# If true, emit the unicode byte-order mark (BOM) at the start of the file -emit_byteorder_mark = False - -# If a comment line starts with at least this many consecutive hash characters, -# then don't lstrip() them off. This allows for lazy hash rulers where the first -# hash char is not separated by space -hashruler_min_length = 10 - -# If true, then insert a space between the first hash char and remaining hash -# chars in a hash ruler, and normalize its length to fill the column -canonicalize_hashrulers = True - -# Specify the encoding of the input file. Defaults to utf-8. -input_encoding = u'utf-8' - -# Specify the encoding of the output file. Defaults to utf-8. Note that cmake -# only claims to support utf-8 so be careful when using anything else -output_encoding = u'utf-8' - -# A dictionary containing any per-command configuration overrides. Currently -# only `command_case` is supported. -per_command = {} diff --git a/libs/assimp/contrib/draco/AUTHORS b/libs/assimp/contrib/draco/AUTHORS deleted file mode 100644 index 67f63a6..0000000 --- a/libs/assimp/contrib/draco/AUTHORS +++ /dev/null @@ -1,7 +0,0 @@ -# This is the list of Draco authors for copyright purposes. -# -# This does not necessarily list everyone who has contributed code, since in -# some cases, their employer may be the copyright holder. To see the full list -# of contributors, see the revision history in source control. -Google Inc. -and other contributors diff --git a/libs/assimp/contrib/draco/BUILDING.md b/libs/assimp/contrib/draco/BUILDING.md deleted file mode 100644 index d33917b..0000000 --- a/libs/assimp/contrib/draco/BUILDING.md +++ /dev/null @@ -1,301 +0,0 @@ -_**Contents**_ - - * [CMake Basics](#cmake-basics) - * [Mac OS X](#mac-os-x) - * [Windows](#windows) - * [CMake Build Configuration](#cmake-build-configuration) - * [Debugging and Optimization](#debugging-and-optimization) - * [Googletest Integration](#googletest-integration) - * [Javascript Encoder/Decoder](#javascript-encoderdecoder) - * [WebAssembly Decoder](#webassembly-decoder) - * [WebAssembly Mesh Only Decoder](#webassembly-mesh-only-decoder) - * [WebAssembly Point Cloud Only Decoder](#webassembly-point-cloud-only-decoder) - * [iOS Builds](#ios-builds) - * [Android Studio Project Integration](#android-studio-project-integration) - * [Native Android Builds](#native-android-builds) - * [vcpkg](#vcpkg) - -Building -======== -For all platforms, you must first generate the project/make files and then -compile the examples. - -CMake Basics ------------- - -To generate project/make files for the default toolchain on your system, run -`cmake` from a directory where you would like to generate build files, and pass -it the path to your Draco repository. - -E.g. Starting from Draco root. - -~~~~~ bash -$ mkdir build_dir && cd build_dir -$ cmake ../ -~~~~~ - -On Windows, the above command will produce Visual Studio project files for the -newest Visual Studio detected on the system. On Mac OS X and Linux systems, -the above command will produce a `makefile`. - -To control what types of projects are generated, add the `-G` parameter to the -`cmake` command. This argument must be followed by the name of a generator. -Running `cmake` with the `--help` argument will list the available -generators for your system. - -Mac OS X ---------- - -On Mac OS X, run the following command to generate Xcode projects: - -~~~~~ bash -$ cmake ../ -G Xcode -~~~~~ - -Windows -------- - -On a Windows box you would run the following command to generate Visual Studio -2019 projects: - -~~~~~ bash -C:\Users\nobody> cmake ../ -G "Visual Studio 16 2019" -A Win32 -~~~~~ - -To generate 64-bit Windows Visual Studio 2019 projects: - -~~~~~ bash -C:\Users\nobody> cmake ../ -G "Visual Studio 16 2019" -A x64 -~~~~~ - - -CMake Build Configuration -------------------------- - -Debugging and Optimization --------------------------- - -Unlike Visual Studio and Xcode projects, the build configuration for make -builds is controlled when you run `cmake`. The following examples demonstrate -various build configurations. - -Omitting the build type produces makefiles that use release build flags -by default: - -~~~~~ bash -$ cmake ../ -~~~~~ - -A makefile using release (optimized) flags is produced like this: - -~~~~~ bash -$ cmake ../ -DCMAKE_BUILD_TYPE=Release -~~~~~ - -A release build with debug info can be produced as well: - -~~~~~ bash -$ cmake ../ -DCMAKE_BUILD_TYPE=RelWithDebInfo -~~~~~ - -And your standard debug build will be produced using: - -~~~~~ bash -$ cmake ../ -DCMAKE_BUILD_TYPE=Debug -~~~~~ - -To enable the use of sanitizers when the compiler in use supports them, set the -sanitizer type when running CMake: - -~~~~~ bash -$ cmake ../ -DDRACO_SANITIZE=address -~~~~~ - -Googletest Integration ----------------------- - -Draco includes testing support built using Googletest. To enable Googletest unit -test support the DRACO_TESTS cmake variable must be turned on at cmake -generation time: - -~~~~~ bash -$ cmake ../ -DDRACO_TESTS=ON -~~~~~ - -When cmake is used as shown in the above example the googletest directory must -be a sibling of the Draco repository root directory. To run the tests execute -`draco_tests` from your build output directory. - -WebAssembly Decoder -------------------- - -The WebAssembly decoder can be built using the existing cmake build file by -passing the path the Emscripten's cmake toolchain file at cmake generation time -in the CMAKE_TOOLCHAIN_FILE variable and enabling the WASM build option. -In addition, the EMSCRIPTEN environment variable must be set to the local path -of the parent directory of the Emscripten tools directory. - -~~~~~ bash -# Make the path to emscripten available to cmake. -$ export EMSCRIPTEN=/path/to/emscripten/tools/parent - -# Emscripten.cmake can be found within your Emscripten installation directory, -# it should be the subdir: cmake/Modules/Platform/Emscripten.cmake -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=/path/to/Emscripten.cmake -DDRACO_WASM=ON - -# Build the WebAssembly decoder. -$ make - -# Run the Javascript wrapper through Closure. -$ java -jar closure.jar --compilation_level SIMPLE --js draco_decoder.js --js_output_file draco_wasm_wrapper.js - -~~~~~ - -WebAssembly Mesh Only Decoder ------------------------------ - -~~~~~ bash - -# cmake command line for mesh only WebAssembly decoder. -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=/path/to/Emscripten.cmake -DDRACO_WASM=ON -DDRACO_POINT_CLOUD_COMPRESSION=OFF - -~~~~~ - -WebAssembly Point Cloud Only Decoder ------------------------------ - -~~~~~ bash - -# cmake command line for point cloud only WebAssembly decoder. -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=/path/to/Emscripten.cmake -DDRACO_WASM=ON -DDRACO_MESH_COMPRESSION=OFF - -~~~~~ - -Javascript Encoder/Decoder ------------------- - -The javascript encoder and decoder can be built using the existing cmake build -file by passing the path the Emscripten's cmake toolchain file at cmake -generation time in the CMAKE_TOOLCHAIN_FILE variable. -In addition, the EMSCRIPTEN environment variable must be set to the local path -of the parent directory of the Emscripten tools directory. - -*Note* The WebAssembly decoder should be favored over the JavaScript decoder. - -~~~~~ bash -# Make the path to emscripten available to cmake. -$ export EMSCRIPTEN=/path/to/emscripten/tools/parent - -# Emscripten.cmake can be found within your Emscripten installation directory, -# it should be the subdir: cmake/Modules/Platform/Emscripten.cmake -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=/path/to/Emscripten.cmake - -# Build the Javascript encoder and decoder. -$ make -~~~~~ - -iOS Builds ---------------------- -These are the basic commands needed to build Draco for iOS targets. -~~~~~ bash - -#arm64 -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/arm64-ios.cmake -$ make - -#x86_64 -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/x86_64-ios.cmake -$ make - -#armv7 -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/armv7-ios.cmake -$ make - -#i386 -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/i386-ios.cmake -$ make -~~~~~~ - -After building for each target the libraries can be merged into a single -universal/fat library using lipo, and then used in iOS applications. - - -Native Android Builds ---------------------- - -It's sometimes useful to build Draco command line tools and run them directly on -Android devices via adb. - -~~~~~ bash -# This example is for armeabi-v7a. -$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/android.cmake \ - -DDRACO_ANDROID_NDK_PATH=path/to/ndk -DANDROID_ABI=armeabi-v7a -$ make - -# See the android.cmake toolchain file for additional ANDROID_ABI options and -# other configurable Android variables. -~~~~~ - -After building the tools they can be moved to an android device via the use of -`adb push`, and then run within an `adb shell` instance. - - -Android Studio Project Integration ----------------------------------- - -Tested on Android Studio 3.5.3. - - -Draco - Static Library ----------------------- - -To include Draco in an existing or new Android Studio project, reference it -from the `cmake` file of an existing native project that has a minimum SDK -version of 18 or higher. The project must support C++11. -To add Draco to your project: - - 1. Create a new "Native C++" project. - - 2. Add the following somewhere within the `CMakeLists.txt` for your project - before the `add_library()` for your project's native-lib: - - ~~~~~ cmake - # Note "/path/to/draco" must be changed to the path where you have cloned - # the Draco sources. - - add_subdirectory(/path/to/draco - ${CMAKE_BINARY_DIR}/draco_build) - include_directories("${CMAKE_BINARY_DIR}" /path/to/draco) - ~~~~~ - - 3. Add the library target "draco" to the `target_link_libraries()` call for - your project's native-lib. The `target_link_libraries()` call for an - empty activity native project looks like this after the addition of - Draco: - - ~~~~~ cmake - target_link_libraries( # Specifies the target library. - native-lib - - # Tells cmake this build depends on libdraco. - draco - - # Links the target library to the log library - # included in the NDK. - ${log-lib} ) - -vcpkg ---------------------- -You can download and install Draco using the -[vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager: - - git clone https://github.com/Microsoft/vcpkg.git - cd vcpkg - ./bootstrap-vcpkg.sh - ./vcpkg integrate install - vcpkg install draco - -The Draco port in vcpkg is kept up to date by Microsoft team members and -community contributors. If the version is out of date, please -[create an issue or pull request](https://github.com/Microsoft/vcpkg) on the -vcpkg repository. diff --git a/libs/assimp/contrib/draco/CMAKE.md b/libs/assimp/contrib/draco/CMAKE.md deleted file mode 100644 index 392c6ce..0000000 --- a/libs/assimp/contrib/draco/CMAKE.md +++ /dev/null @@ -1,106 +0,0 @@ -# CMake Build System Overview - -[TOC] - -This document provides a general layout of the Draco CMake build system. - -## Core Build System Files - -These files are listed in order of interest to maintainers of the build system. - -- `CMakeLists.txt` is the main driver of the build system. It's responsible - for defining targets and source lists, surfacing build system options, and - tying the components of the build system together. - -- `cmake/draco_build_definitions.cmake` defines the macro - `draco_set_build_definitions()`, which is called from `CMakeLists.txt` to - configure include paths, compiler and linker flags, library settings, - platform speficic configuration, and other build system settings that - depend on optional build configurations. - -- `cmake/draco_targets.cmake` defines the macros `draco_add_library()` and - `draco_add_executable()` which are used to create all targets in the CMake - build. These macros attempt to behave in a manner that loosely mirrors the - blaze `cc_library()` and `cc_binary()` commands. Note that - `draco_add_executable()` is also used for tests. - -- `cmake/draco_emscripten.cmake` handles Emscripten SDK integration. It - defines several Emscripten specific macros that are required to build the - Emscripten specific targets defined in `CMakeLists.txt`. - -- `cmake/draco_flags.cmake` defines macros related to compiler and linker - flags. Testing macros, macros for isolating flags to specific source files, - and the main flag configuration function for the library are defined here. - -- `cmake/draco_options.cmake` defines macros that control optional features - of draco, and help track draco library and build system options. - -- `cmake/draco_install.cmake` defines the draco install target. - -- `cmake/draco_cpu_detection.cmake` determines the optimization types to - enable based on target system processor as reported by CMake. - -- `cmake/draco_intrinsics.cmake` manages flags for source files that use - intrinsics. It handles detection of whether flags are necessary, and the - application of the flags to the sources that need them when they are - required. - -## Helper and Utility Files - -- `.cmake-format.py` Defines coding style for cmake-format. - -- `cmake/draco_helpers.cmake` defines utility macros. - -- `cmake/draco_sanitizer.cmake` defines the `draco_configure_sanitizer()` - macro, which implements support for `DRACO_SANITIZE`. It handles the - compiler and linker flags necessary for using sanitizers like asan and msan. - -- `cmake/draco_variables.cmake` defines macros for tracking and control of - draco build system variables. - -## Toolchain Files - -These files help facilitate cross compiling of draco for various targets. - -- `cmake/toolchains/aarch64-linux-gnu.cmake` provides cross compilation - support for arm64 targets. - -- `cmake/toolchains/android.cmake` provides cross compilation support for - Android targets. - -- `cmake/toolchains/arm-linux-gnueabihf.cmake` provides cross compilation - support for armv7 targets. - -- `cmake/toolchains/arm64-ios.cmake`, `cmake/toolchains/armv7-ios.cmake`, - and `cmake/toolchains/armv7s-ios.cmake` provide support for iOS. - -- `cmake/toolchains/arm64-linux-gcc.cmake` and - `cmake/toolchains/armv7-linux-gcc.cmake` are deprecated, but remain for - compatibility. `cmake/toolchains/android.cmake` should be used instead. - -- `cmake/toolchains/arm64-android-ndk-libcpp.cmake`, - `cmake/toolchains/armv7-android-ndk-libcpp.cmake`, - `cmake/toolchains/x86-android-ndk-libcpp.cmake`, and - `cmake/toolchains/x86_64-android-ndk-libcpp.cmake` are deprecated, but - remain for compatibility. `cmake/toolchains/android.cmake` should be used - instead. - -- `cmake/toolchains/i386-ios.cmake` and `cmake/toolchains/x86_64-ios.cmake` - provide support for the iOS simulator. - -- `cmake/toolchains/android-ndk-common.cmake` and - `cmake/toolchains/arm-ios-common.cmake` are support files used by other - toolchain files. - -## Template Files - -These files are inputs to the CMake build and are used to generate inputs to the -build system output by CMake. - -- `cmake/draco-config.cmake.template` is used to produce - draco-config.cmake. draco-config.cmake can be used by CMake to find draco - when another CMake project depends on draco. - -- `cmake/draco.pc.template` is used to produce draco's pkg-config file. - Some build systems use pkg-config to configure include and library paths - when they depend upon third party libraries like draco. diff --git a/libs/assimp/contrib/draco/CMakeLists.txt b/libs/assimp/contrib/draco/CMakeLists.txt deleted file mode 100644 index 5526e7f..0000000 --- a/libs/assimp/contrib/draco/CMakeLists.txt +++ /dev/null @@ -1,952 +0,0 @@ -cmake_minimum_required(VERSION 3.12 FATAL_ERROR) - -# Draco requires C++11. -set(CMAKE_CXX_STANDARD 11) -project(draco C CXX) - -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) -endif() - -set(draco_root "${CMAKE_CURRENT_SOURCE_DIR}") -set(draco_src_root "${draco_root}/src/draco") -set(draco_build "${CMAKE_BINARY_DIR}") - -if("${draco_root}" STREQUAL "${draco_build}") - message( - FATAL_ERROR "Building from within the Draco source tree is not supported.\n" - "Hint: Run these commands\n" - "$ rm -rf CMakeCache.txt CMakeFiles\n" - "$ mkdir -p ../draco_build\n" "$ cd ../draco_build\n" - "And re-run CMake from the draco_build directory.") -endif() - -include(CMakePackageConfigHelpers) -include(FindPythonInterp) -include("${draco_root}/cmake/draco_build_definitions.cmake") -include("${draco_root}/cmake/draco_cpu_detection.cmake") -include("${draco_root}/cmake/draco_emscripten.cmake") -include("${draco_root}/cmake/draco_flags.cmake") -include("${draco_root}/cmake/draco_helpers.cmake") -include("${draco_root}/cmake/draco_install.cmake") -include("${draco_root}/cmake/draco_intrinsics.cmake") -include("${draco_root}/cmake/draco_options.cmake") -include("${draco_root}/cmake/draco_sanitizer.cmake") -include("${draco_root}/cmake/draco_targets.cmake") -include("${draco_root}/cmake/draco_tests.cmake") -include("${draco_root}/cmake/draco_variables.cmake") - -# C++ and linker flags. -draco_track_configuration_variable(DRACO_CXX_FLAGS) -draco_track_configuration_variable(DRACO_EXE_LINKER_FLAGS) - -# Sanitizer integration. -draco_track_configuration_variable(DRACO_SANITIZE) - -# Generated source file directory. -draco_track_configuration_variable(DRACO_GENERATED_SOURCES_DIRECTORY) - -# Controls use of std::mutex and absl::Mutex in ThreadPool. -draco_track_configuration_variable(DRACO_THREADPOOL_USE_STD_MUTEX) - -if(DRACO_VERBOSE) - draco_dump_cmake_flag_variables() - draco_dump_tracked_configuration_variables() - draco_dump_options() -endif() - -# Compiler/linker flags must be lists, but come in from the environment as -# strings. Break them up: -if(NOT "${DRACO_CXX_FLAGS}" STREQUAL "") - separate_arguments(DRACO_CXX_FLAGS) -endif() -if(NOT "${DRACO_EXE_LINKER_FLAGS}" STREQUAL "") - separate_arguments(DRACO_EXE_LINKER_FLAGS) -endif() - -draco_reset_target_lists() -draco_setup_options() -draco_set_build_definitions() -draco_set_cxx_flags() -draco_generate_features_h() - -# Draco source file listing variables. -list(APPEND draco_attributes_sources - "${draco_src_root}/attributes/attribute_octahedron_transform.cc" - "${draco_src_root}/attributes/attribute_octahedron_transform.h" - "${draco_src_root}/attributes/attribute_quantization_transform.cc" - "${draco_src_root}/attributes/attribute_quantization_transform.h" - "${draco_src_root}/attributes/attribute_transform.cc" - "${draco_src_root}/attributes/attribute_transform.h" - "${draco_src_root}/attributes/attribute_transform_data.h" - "${draco_src_root}/attributes/attribute_transform_type.h" - "${draco_src_root}/attributes/geometry_attribute.cc" - "${draco_src_root}/attributes/geometry_attribute.h" - "${draco_src_root}/attributes/geometry_indices.h" - "${draco_src_root}/attributes/point_attribute.cc" - "${draco_src_root}/attributes/point_attribute.h") - -list( - APPEND - draco_compression_attributes_dec_sources - "${draco_src_root}/compression/attributes/attributes_decoder.cc" - "${draco_src_root}/compression/attributes/attributes_decoder.h" - "${draco_src_root}/compression/attributes/kd_tree_attributes_decoder.cc" - "${draco_src_root}/compression/attributes/kd_tree_attributes_decoder.h" - "${draco_src_root}/compression/attributes/kd_tree_attributes_shared.h" - "${draco_src_root}/compression/attributes/mesh_attribute_indices_encoding_data.h" - "${draco_src_root}/compression/attributes/normal_compression_utils.h" - "${draco_src_root}/compression/attributes/point_d_vector.h" - "${draco_src_root}/compression/attributes/sequential_attribute_decoder.cc" - "${draco_src_root}/compression/attributes/sequential_attribute_decoder.h" - "${draco_src_root}/compression/attributes/sequential_attribute_decoders_controller.cc" - "${draco_src_root}/compression/attributes/sequential_attribute_decoders_controller.h" - "${draco_src_root}/compression/attributes/sequential_integer_attribute_decoder.cc" - "${draco_src_root}/compression/attributes/sequential_integer_attribute_decoder.h" - "${draco_src_root}/compression/attributes/sequential_normal_attribute_decoder.cc" - "${draco_src_root}/compression/attributes/sequential_normal_attribute_decoder.h" - "${draco_src_root}/compression/attributes/sequential_quantization_attribute_decoder.cc" - "${draco_src_root}/compression/attributes/sequential_quantization_attribute_decoder.h" - ) - -list( - APPEND - draco_compression_attributes_enc_sources - "${draco_src_root}/compression/attributes/attributes_encoder.cc" - "${draco_src_root}/compression/attributes/attributes_encoder.h" - "${draco_src_root}/compression/attributes/kd_tree_attributes_encoder.cc" - "${draco_src_root}/compression/attributes/kd_tree_attributes_encoder.h" - "${draco_src_root}/compression/attributes/linear_sequencer.h" - "${draco_src_root}/compression/attributes/points_sequencer.h" - "${draco_src_root}/compression/attributes/sequential_attribute_encoder.cc" - "${draco_src_root}/compression/attributes/sequential_attribute_encoder.h" - "${draco_src_root}/compression/attributes/sequential_attribute_encoders_controller.cc" - "${draco_src_root}/compression/attributes/sequential_attribute_encoders_controller.h" - "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoder.cc" - "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoder.h" - "${draco_src_root}/compression/attributes/sequential_normal_attribute_encoder.cc" - "${draco_src_root}/compression/attributes/sequential_normal_attribute_encoder.h" - "${draco_src_root}/compression/attributes/sequential_quantization_attribute_encoder.cc" - "${draco_src_root}/compression/attributes/sequential_quantization_attribute_encoder.h" - ) - - -list( - APPEND - draco_compression_attributes_pred_schemes_dec_sources - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_factory.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_interface.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h" - ) - -list( - APPEND - draco_compression_attributes_pred_schemes_enc_sources - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_factory.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_interface.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h" - ) - -list( - APPEND - draco_compression_bit_coders_sources - "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_coding_shared.h" - "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_decoder.cc" - "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_decoder.h" - "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_encoder.cc" - "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_encoder.h" - "${draco_src_root}/compression/bit_coders/direct_bit_decoder.cc" - "${draco_src_root}/compression/bit_coders/direct_bit_decoder.h" - "${draco_src_root}/compression/bit_coders/direct_bit_encoder.cc" - "${draco_src_root}/compression/bit_coders/direct_bit_encoder.h" - "${draco_src_root}/compression/bit_coders/folded_integer_bit_decoder.h" - "${draco_src_root}/compression/bit_coders/folded_integer_bit_encoder.h" - "${draco_src_root}/compression/bit_coders/rans_bit_decoder.cc" - "${draco_src_root}/compression/bit_coders/rans_bit_decoder.h" - "${draco_src_root}/compression/bit_coders/rans_bit_encoder.cc" - "${draco_src_root}/compression/bit_coders/rans_bit_encoder.h" - "${draco_src_root}/compression/bit_coders/symbol_bit_decoder.cc" - "${draco_src_root}/compression/bit_coders/symbol_bit_decoder.h" - "${draco_src_root}/compression/bit_coders/symbol_bit_encoder.cc" - "${draco_src_root}/compression/bit_coders/symbol_bit_encoder.h") - -list(APPEND draco_enc_config_sources - "${draco_src_root}/compression/config/compression_shared.h" - "${draco_src_root}/compression/config/draco_options.h" - "${draco_src_root}/compression/config/encoder_options.h" - "${draco_src_root}/compression/config/encoding_features.h") - -list(APPEND draco_dec_config_sources - "${draco_src_root}/compression/config/compression_shared.h" - "${draco_src_root}/compression/config/decoder_options.h" - "${draco_src_root}/compression/config/draco_options.h") - -list(APPEND draco_compression_decode_sources - "${draco_src_root}/compression/decode.cc" - "${draco_src_root}/compression/decode.h") - -list(APPEND draco_compression_encode_sources - "${draco_src_root}/compression/encode.cc" - "${draco_src_root}/compression/encode.h" - "${draco_src_root}/compression/encode_base.h" - "${draco_src_root}/compression/expert_encode.cc" - "${draco_src_root}/compression/expert_encode.h") - -list( - APPEND - draco_compression_mesh_traverser_sources - "${draco_src_root}/compression/mesh/traverser/depth_first_traverser.h" - "${draco_src_root}/compression/mesh/traverser/max_prediction_degree_traverser.h" - "${draco_src_root}/compression/mesh/traverser/mesh_attribute_indices_encoding_observer.h" - "${draco_src_root}/compression/mesh/traverser/mesh_traversal_sequencer.h" - "${draco_src_root}/compression/mesh/traverser/traverser_base.h") - -list( - APPEND - draco_compression_mesh_dec_sources - "${draco_src_root}/compression/mesh/mesh_decoder.cc" - "${draco_src_root}/compression/mesh/mesh_decoder.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder.cc" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl.cc" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl_interface.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_shared.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_decoder.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_valence_decoder.h" - "${draco_src_root}/compression/mesh/mesh_sequential_decoder.cc" - "${draco_src_root}/compression/mesh/mesh_sequential_decoder.h") - -list( - APPEND - draco_compression_mesh_enc_sources - "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder.cc" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl.cc" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl_interface.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_shared.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_encoder.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_predictive_encoder.h" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_valence_encoder.h" - "${draco_src_root}/compression/mesh/mesh_encoder.cc" - "${draco_src_root}/compression/mesh/mesh_encoder.h" - "${draco_src_root}/compression/mesh/mesh_sequential_encoder.cc" - "${draco_src_root}/compression/mesh/mesh_sequential_encoder.h") - -list( - APPEND - draco_compression_point_cloud_dec_sources - "${draco_src_root}/compression/point_cloud/point_cloud_decoder.cc" - "${draco_src_root}/compression/point_cloud/point_cloud_decoder.h" - "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_decoder.cc" - "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_decoder.h" - "${draco_src_root}/compression/point_cloud/point_cloud_sequential_decoder.cc" - "${draco_src_root}/compression/point_cloud/point_cloud_sequential_decoder.h" - ) - -list( - APPEND - draco_compression_point_cloud_enc_sources - "${draco_src_root}/compression/point_cloud/point_cloud_encoder.cc" - "${draco_src_root}/compression/point_cloud/point_cloud_encoder.h" - "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoder.cc" - "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoder.h" - "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.cc" - "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.h" - ) - -list(APPEND draco_compression_entropy_sources - "${draco_src_root}/compression/entropy/ans.h" - "${draco_src_root}/compression/entropy/rans_symbol_coding.h" - "${draco_src_root}/compression/entropy/rans_symbol_decoder.h" - "${draco_src_root}/compression/entropy/rans_symbol_encoder.h" - "${draco_src_root}/compression/entropy/shannon_entropy.cc" - "${draco_src_root}/compression/entropy/shannon_entropy.h" - "${draco_src_root}/compression/entropy/symbol_decoding.cc" - "${draco_src_root}/compression/entropy/symbol_decoding.h" - "${draco_src_root}/compression/entropy/symbol_encoding.cc" - "${draco_src_root}/compression/entropy/symbol_encoding.h") - -list(APPEND draco_core_sources - "${draco_src_root}/core/bit_utils.cc" - "${draco_src_root}/core/bit_utils.h" - "${draco_src_root}/core/bounding_box.cc" - "${draco_src_root}/core/bounding_box.h" - "${draco_src_root}/core/cycle_timer.cc" - "${draco_src_root}/core/cycle_timer.h" - "${draco_src_root}/core/data_buffer.cc" - "${draco_src_root}/core/data_buffer.h" - "${draco_src_root}/core/decoder_buffer.cc" - "${draco_src_root}/core/decoder_buffer.h" - "${draco_src_root}/core/divide.cc" - "${draco_src_root}/core/divide.h" - "${draco_src_root}/core/draco_index_type.h" - "${draco_src_root}/core/draco_index_type_vector.h" - "${draco_src_root}/core/draco_types.cc" - "${draco_src_root}/core/draco_types.h" - "${draco_src_root}/core/encoder_buffer.cc" - "${draco_src_root}/core/encoder_buffer.h" - "${draco_src_root}/core/hash_utils.cc" - "${draco_src_root}/core/hash_utils.h" - "${draco_src_root}/core/macros.h" - "${draco_src_root}/core/math_utils.h" - "${draco_src_root}/core/options.cc" - "${draco_src_root}/core/options.h" - "${draco_src_root}/core/quantization_utils.cc" - "${draco_src_root}/core/quantization_utils.h" - "${draco_src_root}/core/status.h" - "${draco_src_root}/core/status_or.h" - "${draco_src_root}/core/varint_decoding.h" - "${draco_src_root}/core/varint_encoding.h" - "${draco_src_root}/core/vector_d.h") - -list(APPEND draco_io_sources - "${draco_src_root}/io/file_reader_factory.cc" - "${draco_src_root}/io/file_reader_factory.h" - "${draco_src_root}/io/file_reader_interface.h" - "${draco_src_root}/io/file_utils.cc" - "${draco_src_root}/io/file_utils.h" - "${draco_src_root}/io/file_writer_factory.cc" - "${draco_src_root}/io/file_writer_factory.h" - "${draco_src_root}/io/file_writer_interface.h" - "${draco_src_root}/io/file_writer_utils.h" - "${draco_src_root}/io/file_writer_utils.cc" - "${draco_src_root}/io/mesh_io.cc" - "${draco_src_root}/io/mesh_io.h" - "${draco_src_root}/io/obj_decoder.cc" - "${draco_src_root}/io/obj_decoder.h" - "${draco_src_root}/io/obj_encoder.cc" - "${draco_src_root}/io/obj_encoder.h" - "${draco_src_root}/io/parser_utils.cc" - "${draco_src_root}/io/parser_utils.h" - "${draco_src_root}/io/ply_decoder.cc" - "${draco_src_root}/io/ply_decoder.h" - "${draco_src_root}/io/ply_encoder.cc" - "${draco_src_root}/io/ply_encoder.h" - "${draco_src_root}/io/ply_property_reader.h" - "${draco_src_root}/io/ply_property_writer.h" - "${draco_src_root}/io/ply_reader.cc" - "${draco_src_root}/io/ply_reader.h" - "${draco_src_root}/io/point_cloud_io.cc" - "${draco_src_root}/io/point_cloud_io.h" - "${draco_src_root}/io/stdio_file_reader.cc" - "${draco_src_root}/io/stdio_file_reader.h" - "${draco_src_root}/io/stdio_file_writer.cc" - "${draco_src_root}/io/stdio_file_writer.h") - -list(APPEND draco_mesh_sources - "${draco_src_root}/mesh/corner_table.cc" - "${draco_src_root}/mesh/corner_table.h" - "${draco_src_root}/mesh/corner_table_iterators.h" - "${draco_src_root}/mesh/mesh.cc" - "${draco_src_root}/mesh/mesh.h" - "${draco_src_root}/mesh/mesh_are_equivalent.cc" - "${draco_src_root}/mesh/mesh_are_equivalent.h" - "${draco_src_root}/mesh/mesh_attribute_corner_table.cc" - "${draco_src_root}/mesh/mesh_attribute_corner_table.h" - "${draco_src_root}/mesh/mesh_cleanup.cc" - "${draco_src_root}/mesh/mesh_cleanup.h" - "${draco_src_root}/mesh/mesh_misc_functions.cc" - "${draco_src_root}/mesh/mesh_misc_functions.h" - "${draco_src_root}/mesh/mesh_stripifier.cc" - "${draco_src_root}/mesh/mesh_stripifier.h" - "${draco_src_root}/mesh/triangle_soup_mesh_builder.cc" - "${draco_src_root}/mesh/triangle_soup_mesh_builder.h" - "${draco_src_root}/mesh/valence_cache.h") - -list(APPEND draco_point_cloud_sources - "${draco_src_root}/point_cloud/point_cloud.cc" - "${draco_src_root}/point_cloud/point_cloud.h" - "${draco_src_root}/point_cloud/point_cloud_builder.cc" - "${draco_src_root}/point_cloud/point_cloud_builder.h") - -list( - APPEND - draco_points_common_sources - "${draco_src_root}/compression/point_cloud/algorithms/point_cloud_compression_method.h" - "${draco_src_root}/compression/point_cloud/algorithms/point_cloud_types.h" - "${draco_src_root}/compression/point_cloud/algorithms/quantize_points_3.h" - "${draco_src_root}/compression/point_cloud/algorithms/queuing_policy.h") - -list( - APPEND - draco_points_dec_sources - "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.cc" - "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.h" - "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_decoder.cc" - "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_decoder.h" - ) - -list( - APPEND - draco_points_enc_sources - "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.cc" - "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.h" - "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_encoder.cc" - "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_encoder.h" - ) - -list(APPEND draco_metadata_sources - "${draco_src_root}/metadata/geometry_metadata.cc" - "${draco_src_root}/metadata/geometry_metadata.h" - "${draco_src_root}/metadata/metadata.cc" - "${draco_src_root}/metadata/metadata.h") - -list(APPEND draco_metadata_enc_sources - "${draco_src_root}/metadata/metadata_encoder.cc" - "${draco_src_root}/metadata/metadata_encoder.h") - -list(APPEND draco_metadata_dec_sources - "${draco_src_root}/metadata/metadata_decoder.cc" - "${draco_src_root}/metadata/metadata_decoder.h") - -list(APPEND draco_animation_sources - "${draco_src_root}/animation/keyframe_animation.cc" - "${draco_src_root}/animation/keyframe_animation.h") - -list(APPEND draco_animation_enc_sources - "${draco_src_root}/animation/keyframe_animation_encoder.cc" - "${draco_src_root}/animation/keyframe_animation_encoder.h") - -list(APPEND draco_animation_dec_sources - "${draco_src_root}/animation/keyframe_animation_decoder.cc" - "${draco_src_root}/animation/keyframe_animation_decoder.h") - -list( - APPEND draco_js_dec_sources - "${draco_src_root}/javascript/emscripten/decoder_webidl_wrapper.cc" - "${draco_src_root}/javascript/emscripten/draco_decoder_glue_wrapper.cc" - ) - -list( - APPEND draco_js_enc_sources - "${draco_src_root}/javascript/emscripten/draco_encoder_glue_wrapper.cc" - "${draco_src_root}/javascript/emscripten/encoder_webidl_wrapper.cc") - -list( - APPEND - draco_animation_js_dec_sources - "${draco_src_root}/javascript/emscripten/animation_decoder_webidl_wrapper.cc" - "${draco_src_root}/javascript/emscripten/draco_animation_decoder_glue_wrapper.cc" - ) - -list( - APPEND - draco_animation_js_enc_sources - "${draco_src_root}/javascript/emscripten/animation_encoder_webidl_wrapper.cc" - "${draco_src_root}/javascript/emscripten/draco_animation_encoder_glue_wrapper.cc" - ) - -list(APPEND draco_unity_plug_sources - "${draco_src_root}/unity/draco_unity_plugin.cc" - "${draco_src_root}/unity/draco_unity_plugin.h") - -list(APPEND draco_maya_plug_sources - "${draco_src_root}/maya/draco_maya_plugin.cc" - "${draco_src_root}/maya/draco_maya_plugin.h") - -# -# Draco targets. -# -if(EMSCRIPTEN AND DRACO_JS_GLUE) - # Draco decoder and encoder "executable" targets in various flavors for - # Emsscripten. - list(APPEND draco_decoder_src - ${draco_attributes_sources} - ${draco_compression_attributes_dec_sources} - ${draco_compression_attributes_pred_schemes_dec_sources} - ${draco_compression_bit_coders_sources} - ${draco_compression_decode_sources} - ${draco_compression_entropy_sources} - ${draco_compression_mesh_traverser_sources} - ${draco_compression_mesh_dec_sources} - ${draco_compression_point_cloud_dec_sources} - ${draco_core_sources} - ${draco_dec_config_sources} - ${draco_js_dec_sources} - ${draco_mesh_sources} - ${draco_metadata_dec_sources} - ${draco_metadata_sources} - ${draco_point_cloud_sources} - ${draco_points_dec_sources}) - - list(APPEND draco_encoder_src - ${draco_attributes_sources} - ${draco_compression_attributes_enc_sources} - ${draco_compression_attributes_pred_schemes_enc_sources} - ${draco_compression_bit_coders_sources} - ${draco_compression_encode_sources} - ${draco_compression_entropy_sources} - ${draco_compression_mesh_traverser_sources} - ${draco_compression_mesh_enc_sources} - ${draco_compression_point_cloud_enc_sources} - ${draco_core_sources} - ${draco_enc_config_sources} - ${draco_js_enc_sources} - ${draco_mesh_sources} - ${draco_metadata_enc_sources} - ${draco_metadata_sources} - ${draco_point_cloud_sources} - ${draco_points_enc_sources}) - - list(APPEND draco_js_dec_idl - "${draco_src_root}/javascript/emscripten/draco_web_decoder.idl") - list(APPEND draco_js_enc_idl - "${draco_src_root}/javascript/emscripten/draco_web_encoder.idl") - list( - APPEND - draco_animation_js_dec_idl - "${draco_src_root}/javascript/emscripten/draco_animation_web_decoder.idl") - list( - APPEND - draco_animation_js_enc_idl - "${draco_src_root}/javascript/emscripten/draco_animation_web_encoder.idl") - list(APPEND draco_pre_link_js_sources - "${draco_src_root}/javascript/emscripten/prepareCallbacks.js" - "${draco_src_root}/javascript/emscripten/version.js") - list(APPEND draco_post_link_js_sources - "${draco_src_root}/javascript/emscripten/finalize.js") - list(APPEND draco_post_link_js_decoder_sources ${draco_post_link_js_sources} - "${draco_src_root}/javascript/emscripten/decoder_functions.js") - - set(draco_decoder_glue_path "${draco_build}/glue_decoder") - set(draco_encoder_glue_path "${draco_build}/glue_encoder") - - draco_generate_emscripten_glue(INPUT_IDL ${draco_js_dec_idl} OUTPUT_PATH - ${draco_decoder_glue_path}) - draco_generate_emscripten_glue(INPUT_IDL ${draco_js_enc_idl} OUTPUT_PATH - ${draco_encoder_glue_path}) - - if(DRACO_DECODER_ATTRIBUTE_DEDUPLICATION) - list(APPEND draco_decoder_features - "DRACO_ATTRIBUTE_INDICES_DEDUPLICATION_SUPPORTED" - "DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED") - endif() - - draco_add_emscripten_executable(NAME - draco_decoder - SOURCES - ${draco_decoder_src} - DEFINES - ${draco_defines} - FEATURES - ${draco_decoder_features} - INCLUDES - ${draco_include_paths} - LINK_FLAGS - "-sEXPORT_NAME=\"DracoDecoderModule\"" - GLUE_PATH - ${draco_decoder_glue_path} - PRE_LINK_JS_SOURCES - ${draco_pre_link_js_sources} - POST_LINK_JS_SOURCES - ${draco_post_link_js_decoder_sources}) - - draco_add_emscripten_executable( - NAME - draco_encoder - SOURCES - ${draco_encoder_src} - DEFINES - ${draco_defines} - FEATURES - DRACO_ATTRIBUTE_INDICES_DEDUPLICATION_SUPPORTED - DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED - INCLUDES - ${draco_include_paths} - LINK_FLAGS - "-sEXPORT_NAME=\"DracoEncoderModule\"" - GLUE_PATH - ${draco_encoder_glue_path} - PRE_LINK_JS_SOURCES - ${draco_pre_link_js_sources} - POST_LINK_JS_SOURCES - ${draco_post_link_js_sources}) - - if(DRACO_ANIMATION_ENCODING) - set(draco_anim_decoder_glue_path "${draco_build}/glue_animation_decoder") - set(draco_anim_encoder_glue_path "${draco_build}/glue_animation_encoder") - - draco_generate_emscripten_glue(INPUT_IDL ${draco_animation_js_dec_idl} - OUTPUT_PATH ${draco_anim_decoder_glue_path}) - draco_generate_emscripten_glue(INPUT_IDL ${draco_animation_js_enc_idl} - OUTPUT_PATH ${draco_anim_encoder_glue_path}) - - draco_add_emscripten_executable( - NAME - draco_animation_decoder - SOURCES - ${draco_animation_dec_sources} - ${draco_animation_js_dec_sources} - ${draco_animation_sources} - ${draco_decoder_src} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - LINK_FLAGS - "-sEXPORT_NAME=\"DracoAnimationDecoderModule\"" - GLUE_PATH - ${draco_anim_decoder_glue_path} - PRE_LINK_JS_SOURCES - ${draco_pre_link_js_sources} - POST_LINK_JS_SOURCES - ${draco_post_link_js_decoder_sources}) - - draco_add_emscripten_executable( - NAME - draco_animation_encoder - SOURCES - ${draco_animation_enc_sources} - ${draco_animation_js_enc_sources} - ${draco_animation_sources} - ${draco_encoder_src} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - LINK_FLAGS - "-sEXPORT_NAME=\"DracoAnimationEncoderModule\"" - GLUE_PATH - ${draco_anim_encoder_glue_path} - PRE_LINK_JS_SOURCES - ${draco_pre_link_js_sources} - POST_LINK_JS_SOURCES - ${draco_post_link_js_sources}) - endif() -else() - # Standard Draco libs, encoder and decoder. Object collections that mirror the - # Draco directory structure. - draco_add_library(NAME draco_attributes TYPE OBJECT SOURCES - ${draco_attributes_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME - draco_compression_attributes_dec - OBJECT - ${draco_compression_attributes_dec_sources} - TYPE - OBJECT - SOURCES - ${draco_compression_attributes_dec_sources} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths}) - draco_add_library(NAME draco_compression_attributes_enc TYPE OBJECT SOURCES - ${draco_compression_attributes_enc_sources} DEFINES - ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_attributes_pred_schemes_dec TYPE - OBJECT SOURCES - ${draco_compression_attributes_pred_schemes_dec_sources}) - draco_add_library(NAME draco_compression_attributes_pred_schemes_enc TYPE - OBJECT SOURCES - ${draco_compression_attributes_pred_schemes_enc_sources} - DEFINES ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_bit_coders TYPE OBJECT SOURCES - ${draco_compression_bit_coders_sources} DEFINES - ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_enc_config TYPE OBJECT SOURCES - ${draco_enc_config_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_dec_config TYPE OBJECT SOURCES - ${draco_dec_config_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_decode TYPE OBJECT SOURCES - ${draco_compression_decode_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_encode TYPE OBJECT SOURCES - ${draco_compression_encode_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_entropy TYPE OBJECT SOURCES - ${draco_compression_entropy_sources} DEFINES - ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_mesh_traverser TYPE OBJECT SOURCES - ${draco_compression_mesh_traverser_sources} DEFINES - ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_mesh_dec TYPE OBJECT SOURCES - ${draco_compression_mesh_dec_sources} DEFINES - ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_mesh_enc TYPE OBJECT SOURCES - ${draco_compression_mesh_enc_sources} DEFINES - ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_point_cloud_dec TYPE OBJECT SOURCES - ${draco_compression_point_cloud_dec_sources} DEFINES - ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_compression_point_cloud_enc TYPE OBJECT SOURCES - ${draco_compression_point_cloud_enc_sources} DEFINES - ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_core TYPE OBJECT SOURCES ${draco_core_sources} - DEFINES ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_io TYPE OBJECT SOURCES ${draco_io_sources} - DEFINES ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_mesh TYPE OBJECT SOURCES ${draco_mesh_sources} - DEFINES ${draco_defines} INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_metadata_dec TYPE OBJECT SOURCES - ${draco_metadata_dec_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_metadata_enc TYPE OBJECT SOURCES - ${draco_metadata_enc_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_metadata TYPE OBJECT SOURCES - ${draco_metadata_sources} DEFINES ${draco_defines} INCLUDES - ${draco_include_paths}) - draco_add_library(NAME draco_animation_dec TYPE OBJECT SOURCES - ${draco_animation_dec_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_animation_enc TYPE OBJECT SOURCES - ${draco_animation_enc_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME draco_animation TYPE OBJECT SOURCES - ${draco_animation_sources} DEFINES ${draco_defines} INCLUDES - ${draco_include_paths}) - draco_add_library(NAME draco_point_cloud TYPE OBJECT SOURCES - ${draco_point_cloud_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - draco_add_library(NAME - draco_points_dec - TYPE - OBJECT - SOURCES - ${draco_points_common_sources} - ${draco_points_dec_sources} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths}) - draco_add_library(NAME - draco_points_enc - TYPE - OBJECT - SOURCES - ${draco_points_common_sources} - ${draco_points_enc_sources} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths}) - - set(draco_object_library_deps - draco_attributes - draco_compression_attributes_dec - draco_compression_attributes_enc - draco_compression_attributes_pred_schemes_dec - draco_compression_attributes_pred_schemes_enc - draco_compression_bit_coders - draco_compression_decode - draco_compression_encode - draco_compression_entropy - draco_compression_mesh_dec - draco_compression_mesh_enc - draco_compression_point_cloud_dec - draco_compression_point_cloud_enc - draco_core - draco_dec_config - draco_enc_config - draco_io - draco_mesh - draco_metadata - draco_metadata_dec - draco_metadata_enc - draco_animation - draco_animation_dec - draco_animation_enc - draco_point_cloud - draco_points_dec - draco_points_enc) - - # Library targets that consume the object collections. - if(MSVC) - # In order to produce a DLL and import library the Windows tools require - # that the exported symbols are part of the DLL target. The unfortunate side - # effect of this is that a single configuration cannot output both the - # static library and the DLL: This results in an either/or situation. - # Windows users of the draco build can have a DLL and an import library, - # or they can have a static library; they cannot have both from a single - # configuration of the build. - if(BUILD_SHARED_LIBS) - set(draco_lib_type SHARED) - else() - set(draco_lib_type STATIC) - endif() - draco_add_library(NAME - draco - OUTPUT_NAME - draco - TYPE - ${draco_lib_type} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - OBJLIB_DEPS - ${draco_object_library_deps}) - - else() - draco_add_library(NAME - draco_static - OUTPUT_NAME - draco - TYPE - STATIC - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - OBJLIB_DEPS - ${draco_object_library_deps}) - - if(BUILD_SHARED_LIBS) - draco_add_library(NAME - draco_shared - SOURCES - "${draco_src_root}/core/draco_version.h" - OUTPUT_NAME - draco - TYPE - SHARED - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - LIB_DEPS - draco_static) - endif() - endif() - - if(DRACO_UNITY_PLUGIN) - if(IOS) - set(unity_decoder_lib_type STATIC) - else() - set(unity_decoder_lib_type MODULE) - endif() - - draco_add_library(NAME draco_unity_plugin TYPE OBJECT SOURCES - ${draco_unity_plug_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - - draco_add_library(NAME - dracodec_unity - TYPE - ${unity_decoder_lib_type} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - OBJLIB_DEPS - draco_unity_plugin - LIB_DEPS - ${draco_plugin_dependency}) - - # For Mac, we need to build a .bundle for the unity plugin. - if(APPLE) - set_target_properties(dracodec_unity PROPERTIES BUNDLE true) - endif() - endif() - - if(DRACO_MAYA_PLUGIN) - draco_add_library(NAME draco_maya_plugin TYPE OBJECT SOURCES - ${draco_maya_plug_sources} DEFINES ${draco_defines} - INCLUDES ${draco_include_paths}) - - draco_add_library(NAME - draco_maya_wrapper - TYPE - MODULE - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - OBJLIB_DEPS - draco_maya_plugin - LIB_DEPS - ${draco_plugin_dependency}) - - # For Mac, we need to build a .bundle for the plugin. - if(APPLE) - set_target_properties(draco_maya_wrapper PROPERTIES BUNDLE true) - endif() - endif() - - # Draco app targets. - draco_add_executable(NAME - draco_decoder - SOURCES - "${draco_src_root}/tools/draco_decoder.cc" - ${draco_io_sources} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - LIB_DEPS - ${draco_dependency}) - - draco_add_executable(NAME - draco_encoder - SOURCES - "${draco_src_root}/tools/draco_encoder.cc" - ${draco_io_sources} - DEFINES - ${draco_defines} - INCLUDES - ${draco_include_paths} - LIB_DEPS - ${draco_dependency}) - - draco_setup_install_target() - draco_setup_test_targets() -endif() - -if(DRACO_VERBOSE) - draco_dump_cmake_flag_variables() - draco_dump_tracked_configuration_variables() - draco_dump_options() -endif() diff --git a/libs/assimp/contrib/draco/CONTRIBUTING.md b/libs/assimp/contrib/draco/CONTRIBUTING.md deleted file mode 100644 index b7bab34..0000000 --- a/libs/assimp/contrib/draco/CONTRIBUTING.md +++ /dev/null @@ -1,27 +0,0 @@ -Want to contribute? Great! First, read this page (including the small print at the end). - -### Before you contribute -Before we can use your code, you must sign the -[Google Individual Contributor License Agreement](https://cla.developers.google.com/about/google-individual) -(CLA), which you can do online. The CLA is necessary mainly because you own the -copyright to your changes, even after your contribution becomes part of our -codebase, so we need your permission to use and distribute your code. We also -need to be sure of various other things—for instance that you'll tell us if you -know that your code infringes on other people's patents. You don't have to sign -the CLA until after you've submitted your code for review and a member has -approved it, but you must do it before we can put your code into our codebase. -Before you start working on a larger contribution, you should get in touch with -us first through the issue tracker with your idea so that we can help out and -possibly guide you. Coordinating up front makes it much easier to avoid -frustration later on. - -### Code reviews -All submissions, including submissions by project members, require review. We -use GitHub pull requests for this purpose. -Please make sure that your code conforms with our -[coding style guidelines](https://google.github.io/styleguide/cppguide.html). - -### The small print -Contributions made by corporations are covered by a different agreement than -the one above, the -[Software Grant and Corporate Contributor License Agreement](https://cla.developers.google.com/about/google-corporate). diff --git a/libs/assimp/contrib/draco/LICENSE b/libs/assimp/contrib/draco/LICENSE deleted file mode 100644 index 3010954..0000000 --- a/libs/assimp/contrib/draco/LICENSE +++ /dev/null @@ -1,252 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - --------------------------------------------------------------------------------- -Files: docs/assets/js/ASCIIMathML.js - -Copyright (c) 2014 Peter Jipsen and other ASCIIMathML.js contributors - -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. - --------------------------------------------------------------------------------- -Files: docs/assets/css/pygments/* - -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -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 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. - -For more information, please refer to diff --git a/libs/assimp/contrib/draco/README.md b/libs/assimp/contrib/draco/README.md deleted file mode 100644 index 0d980b3..0000000 --- a/libs/assimp/contrib/draco/README.md +++ /dev/null @@ -1,478 +0,0 @@ -

- -

- -[![Build Status](https://github.com/google/draco/workflows/Build/badge.svg)](https://github.com/google/draco/actions?query=workflow%3ABuild) - -News -======= -### Version 1.4.1 release -* Using the versioned www.gstatic.com WASM and Javascript decoders is now - recommended. To use v1.4.1, use this URL: - * https://www.gstatic.com/draco/versioned/decoders/1.4.1/* - * Replace the * with the files to load. E.g. - * https://www.gstatic.com/draco/versioned/decoders/1.4.1/draco_decoder.js - * This works with the v1.3.6 and v1.4.0 releases, and will work with future - Draco releases. -* Bug fixes - -### Version 1.4.0 release -* WASM and JavaScript decoders are hosted from a static URL. - * It is recommended to always pull your Draco WASM and JavaScript decoders from this URL: - * https://www.gstatic.com/draco/v1/decoders/* - * Replace * with the files to load. E.g. - * https://www.gstatic.com/draco/v1/decoders/draco_decoder_gltf.wasm - * Users will benefit from having the Draco decoder in cache as more sites start using the static URL -* Changed npm modules to use WASM, which increased performance by ~200%. -* Updated Emscripten to 2.0. - * This causes the Draco codec modules to return a promise instead of the module directly. - * Please see the example code on how to handle the promise. -* Changed NORMAL quantization default to 8. -* Added new array API to decoder and deprecated DecoderBuffer. - * See PR https://github.com/google/draco/issues/513 for more information. -* Changed WASM/JavaScript behavior of catching exceptions. - * See issue https://github.com/google/draco/issues/629 for more information. -* Code cleanup. -* Emscripten builds now disable NODEJS_CATCH_EXIT and NODEJS_CATCH_REJECTION. - * Authors of a CLI tool might want to add their own error handlers. -* Added Maya plugin builds. -* Unity plugin builds updated. - * Builds are now stored as archives. - * Added iOS build. - * Unity users may want to look into https://github.com/atteneder/DracoUnity. -* Bug fixes. - -### Version 1.3.6 release -* WASM and JavaScript decoders are now hosted from a static URL - * It is recommended to always pull your Draco WASM and JavaScript decoders from this URL: - * https://www.gstatic.com/draco/v1/decoders/* - * Replace * with the files to load. E.g. - * https://www.gstatic.com/draco/v1/decoders/draco_decoder_gltf.wasm - * Users will benefit from having the Draco decoder in cache as more sites start using the static URL -* Changed web examples to pull Draco decoders from static URL -* Added new API to Draco WASM decoder, which increased performance by ~15% -* Decreased Draco WASM decoder size by ~20% -* Added support for generic and multiple attributes to Draco Unity plug-ins -* Added new API to Draco Unity, which increased decoder performance by ~15% -* Changed quantization defaults: - * POSITION: 11 - * NORMAL: 7 - * TEX_COORD: 10 - * COLOR: 8 - * GENERIC: 8 -* Code cleanup -* Bug fixes - -### Version 1.3.5 release -* Added option to build Draco for Universal Scene Description -* Code cleanup -* Bug fixes - -### Version 1.3.4 release -* Released Draco Animation code -* Fixes for Unity -* Various file location and name changes - -### Version 1.3.3 release -* Added ExpertEncoder to the Javascript API - * Allows developers to set quantization options per attribute id -* Bug fixes - -### Version 1.3.2 release -* Bug fixes - -### Version 1.3.1 release -* Fix issue with multiple attributes when skipping an attribute transform - -### Version 1.3.0 release -* Improved kD-tree based point cloud encoding - * Now applicable to point clouds with any number of attributes - * Support for all integer attribute types and quantized floating point types -* Improved mesh compression up to 10% (on average ~2%) - * For meshes, the 1.3.0 bitstream is fully compatible with 1.2.x decoders -* Improved Javascript API - * Added support for all signed and unsigned integer types - * Added support for point clouds to our Javascript encoder API -* Added support for integer properties to the PLY decoder -* Bug fixes - -### Previous releases -https://github.com/google/draco/releases - -Description -=========== - -Draco is a library for compressing and decompressing 3D geometric [meshes] and -[point clouds]. It is intended to improve the storage and transmission of 3D -graphics. - -Draco was designed and built for compression efficiency and speed. The code -supports compressing points, connectivity information, texture coordinates, -color information, normals, and any other generic attributes associated with -geometry. With Draco, applications using 3D graphics can be significantly -smaller without compromising visual fidelity. For users, this means apps can -now be downloaded faster, 3D graphics in the browser can load quicker, and VR -and AR scenes can now be transmitted with a fraction of the bandwidth and -rendered quickly. - -Draco is released as C++ source code that can be used to compress 3D graphics -as well as C++ and Javascript decoders for the encoded data. - - -_**Contents**_ - - * [Building](#building) - * [Usage](#usage) - * [Unity](#unity) - * [WASM and JavaScript Decoders](#WASM-and-JavaScript-Decoders) - * [Command Line Applications](#command-line-applications) - * [Encoding Tool](#encoding-tool) - * [Encoding Point Clouds](#encoding-point-clouds) - * [Decoding Tool](#decoding-tool) - * [C++ Decoder API](#c-decoder-api) - * [Javascript Encoder API](#javascript-encoder-api) - * [Javascript Decoder API](#javascript-decoder-api) - * [Javascript Decoder Performance](#javascript-decoder-performance) - * [Metadata API](#metadata-api) - * [NPM Package](#npm-package) - * [three.js Renderer Example](#threejs-renderer-example) - * [Support](#support) - * [License](#license) - * [References](#references) - - -Building -======== -See [BUILDING](BUILDING.md) for building instructions. - - -Usage -====== - -Unity ------ -For the best information about using Unity with Draco please visit https://github.com/atteneder/DracoUnity - -For a simple example of using Unity with Draco see [README](unity/README.md) in the unity folder. - -WASM and JavaScript Decoders ----------------------------- - -It is recommended to always pull your Draco WASM and JavaScript decoders from: - -~~~~~ bash -https://www.gstatic.com/draco/v1/decoders/ -~~~~~ - -Users will benefit from having the Draco decoder in cache as more sites start using the static URL. - -Command Line Applications ------------------------- - -The default target created from the build files will be the `draco_encoder` -and `draco_decoder` command line applications. For both applications, if you -run them without any arguments or `-h`, the applications will output usage and -options. - -Encoding Tool -------------- - -`draco_encoder` will read OBJ or PLY files as input, and output Draco-encoded -files. We have included Stanford's [Bunny] mesh for testing. The basic command -line looks like this: - -~~~~~ bash -./draco_encoder -i testdata/bun_zipper.ply -o out.drc -~~~~~ - -A value of `0` for the quantization parameter will not perform any quantization -on the specified attribute. Any value other than `0` will quantize the input -values for the specified attribute to that number of bits. For example: - -~~~~~ bash -./draco_encoder -i testdata/bun_zipper.ply -o out.drc -qp 14 -~~~~~ - -will quantize the positions to 14 bits (default is 11 for the position -coordinates). - -In general, the more you quantize your attributes the better compression rate -you will get. It is up to your project to decide how much deviation it will -tolerate. In general, most projects can set quantization values of about `11` -without any noticeable difference in quality. - -The compression level (`-cl`) parameter turns on/off different compression -features. - -~~~~~ bash -./draco_encoder -i testdata/bun_zipper.ply -o out.drc -cl 8 -~~~~~ - -In general, the highest setting, `10`, will have the most compression but -worst decompression speed. `0` will have the least compression, but best -decompression speed. The default setting is `7`. - -Encoding Point Clouds ---------------------- - -You can encode point cloud data with `draco_encoder` by specifying the -`-point_cloud` parameter. If you specify the `-point_cloud` parameter with a -mesh input file, `draco_encoder` will ignore the connectivity data and encode -the positions from the mesh file. - -~~~~~ bash -./draco_encoder -point_cloud -i testdata/bun_zipper.ply -o out.drc -~~~~~ - -This command line will encode the mesh input as a point cloud, even though the -input might not produce compression that is representative of other point -clouds. Specifically, one can expect much better compression rates for larger -and denser point clouds. - -Decoding Tool -------------- - -`draco_decoder` will read Draco files as input, and output OBJ or PLY files. -The basic command line looks like this: - -~~~~~ bash -./draco_decoder -i in.drc -o out.obj -~~~~~ - -C++ Decoder API -------------- - -If you'd like to add decoding to your applications you will need to include -the `draco_dec` library. In order to use the Draco decoder you need to -initialize a `DecoderBuffer` with the compressed data. Then call -`DecodeMeshFromBuffer()` to return a decoded mesh object or call -`DecodePointCloudFromBuffer()` to return a decoded `PointCloud` object. For -example: - -~~~~~ cpp -draco::DecoderBuffer buffer; -buffer.Init(data.data(), data.size()); - -const draco::EncodedGeometryType geom_type = - draco::GetEncodedGeometryType(&buffer); -if (geom_type == draco::TRIANGULAR_MESH) { - unique_ptr mesh = draco::DecodeMeshFromBuffer(&buffer); -} else if (geom_type == draco::POINT_CLOUD) { - unique_ptr pc = draco::DecodePointCloudFromBuffer(&buffer); -} -~~~~~ - -Please see [src/draco/mesh/mesh.h](src/draco/mesh/mesh.h) for the full `Mesh` class interface and -[src/draco/point_cloud/point_cloud.h](src/draco/point_cloud/point_cloud.h) for the full `PointCloud` class interface. - - -Javascript Encoder API ----------------------- -The Javascript encoder is located in `javascript/draco_encoder.js`. The encoder -API can be used to compress mesh and point cloud. In order to use the encoder, -you need to first create an instance of `DracoEncoderModule`. Then use this -instance to create `MeshBuilder` and `Encoder` objects. `MeshBuilder` is used -to construct a mesh from geometry data that could be later compressed by -`Encoder`. First create a mesh object using `new encoderModule.Mesh()` . Then, -use `AddFacesToMesh()` to add indices to the mesh and use -`AddFloatAttributeToMesh()` to add attribute data to the mesh, e.g. position, -normal, color and texture coordinates. After a mesh is constructed, you could -then use `EncodeMeshToDracoBuffer()` to compress the mesh. For example: - -~~~~~ js -const mesh = { - indices : new Uint32Array(indices), - vertices : new Float32Array(vertices), - normals : new Float32Array(normals) -}; - -const encoderModule = DracoEncoderModule(); -const encoder = new encoderModule.Encoder(); -const meshBuilder = new encoderModule.MeshBuilder(); -const dracoMesh = new encoderModule.Mesh(); - -const numFaces = mesh.indices.length / 3; -const numPoints = mesh.vertices.length; -meshBuilder.AddFacesToMesh(dracoMesh, numFaces, mesh.indices); - -meshBuilder.AddFloatAttributeToMesh(dracoMesh, encoderModule.POSITION, - numPoints, 3, mesh.vertices); -if (mesh.hasOwnProperty('normals')) { - meshBuilder.AddFloatAttributeToMesh( - dracoMesh, encoderModule.NORMAL, numPoints, 3, mesh.normals); -} -if (mesh.hasOwnProperty('colors')) { - meshBuilder.AddFloatAttributeToMesh( - dracoMesh, encoderModule.COLOR, numPoints, 3, mesh.colors); -} -if (mesh.hasOwnProperty('texcoords')) { - meshBuilder.AddFloatAttributeToMesh( - dracoMesh, encoderModule.TEX_COORD, numPoints, 3, mesh.texcoords); -} - -if (method === "edgebreaker") { - encoder.SetEncodingMethod(encoderModule.MESH_EDGEBREAKER_ENCODING); -} else if (method === "sequential") { - encoder.SetEncodingMethod(encoderModule.MESH_SEQUENTIAL_ENCODING); -} - -const encodedData = new encoderModule.DracoInt8Array(); -// Use default encoding setting. -const encodedLen = encoder.EncodeMeshToDracoBuffer(dracoMesh, - encodedData); -encoderModule.destroy(dracoMesh); -encoderModule.destroy(encoder); -encoderModule.destroy(meshBuilder); - -~~~~~ -Please see [src/draco/javascript/emscripten/draco_web_encoder.idl](src/draco/javascript/emscripten/draco_web_encoder.idl) for the full API. - -Javascript Decoder API ----------------------- - -The Javascript decoder is located in [javascript/draco_decoder.js](javascript/draco_decoder.js). The -Javascript decoder can decode mesh and point cloud. In order to use the -decoder, you must first create an instance of `DracoDecoderModule`. The -instance is then used to create `DecoderBuffer` and `Decoder` objects. Set -the encoded data in the `DecoderBuffer`. Then call `GetEncodedGeometryType()` -to identify the type of geometry, e.g. mesh or point cloud. Then call either -`DecodeBufferToMesh()` or `DecodeBufferToPointCloud()`, which will return -a Mesh object or a point cloud. For example: - -~~~~~ js -// Create the Draco decoder. -const decoderModule = DracoDecoderModule(); -const buffer = new decoderModule.DecoderBuffer(); -buffer.Init(byteArray, byteArray.length); - -// Create a buffer to hold the encoded data. -const decoder = new decoderModule.Decoder(); -const geometryType = decoder.GetEncodedGeometryType(buffer); - -// Decode the encoded geometry. -let outputGeometry; -let status; -if (geometryType == decoderModule.TRIANGULAR_MESH) { - outputGeometry = new decoderModule.Mesh(); - status = decoder.DecodeBufferToMesh(buffer, outputGeometry); -} else { - outputGeometry = new decoderModule.PointCloud(); - status = decoder.DecodeBufferToPointCloud(buffer, outputGeometry); -} - -// You must explicitly delete objects created from the DracoDecoderModule -// or Decoder. -decoderModule.destroy(outputGeometry); -decoderModule.destroy(decoder); -decoderModule.destroy(buffer); -~~~~~ - -Please see [src/draco/javascript/emscripten/draco_web_decoder.idl](src/draco/javascript/emscripten/draco_web_decoder.idl) for the full API. - -Javascript Decoder Performance ------------------------------- - -The Javascript decoder is built with dynamic memory. This will let the decoder -work with all of the compressed data. But this option is not the fastest. -Pre-allocating the memory sees about a 2x decoder speed improvement. If you -know all of your project's memory requirements, you can turn on static memory -by changing `CMakeLists.txt` accordingly. - -Metadata API ------------- -Starting from v1.0, Draco provides metadata functionality for encoding data -other than geometry. It could be used to encode any custom data along with the -geometry. For example, we can enable metadata functionality to encode the name -of attributes, name of sub-objects and customized information. -For one mesh and point cloud, it can have one top-level geometry metadata class. -The top-level metadata then can have hierarchical metadata. Other than that, -the top-level metadata can have metadata for each attribute which is called -attribute metadata. The attribute metadata should be initialized with the -correspondent attribute id within the mesh. The metadata API is provided both -in C++ and Javascript. -For example, to add metadata in C++: - -~~~~~ cpp -draco::PointCloud pc; -// Add metadata for the geometry. -std::unique_ptr metadata = - std::unique_ptr(new draco::GeometryMetadata()); -metadata->AddEntryString("description", "This is an example."); -pc.AddMetadata(std::move(metadata)); - -// Add metadata for attributes. -draco::GeometryAttribute pos_att; -pos_att.Init(draco::GeometryAttribute::POSITION, nullptr, 3, - draco::DT_FLOAT32, false, 12, 0); -const uint32_t pos_att_id = pc.AddAttribute(pos_att, false, 0); - -std::unique_ptr pos_metadata = - std::unique_ptr( - new draco::AttributeMetadata(pos_att_id)); -pos_metadata->AddEntryString("name", "position"); - -// Directly add attribute metadata to geometry. -// You can do this without explicitly add |GeometryMetadata| to mesh. -pc.AddAttributeMetadata(pos_att_id, std::move(pos_metadata)); -~~~~~ - -To read metadata from a geometry in C++: - -~~~~~ cpp -// Get metadata for the geometry. -const draco::GeometryMetadata *pc_metadata = pc.GetMetadata(); - -// Request metadata for a specific attribute. -const draco::AttributeMetadata *requested_pos_metadata = - pc.GetAttributeMetadataByStringEntry("name", "position"); -~~~~~ - -Please see [src/draco/metadata](src/draco/metadata) and [src/draco/point_cloud](src/draco/point_cloud) for the full API. - -NPM Package ------------ -Draco NPM NodeJS package is located in [javascript/npm/draco3d](javascript/npm/draco3d). Please see the -doc in the folder for detailed usage. - -three.js Renderer Example -------------------------- - -Here's an [example] of a geometric compressed with Draco loaded via a -Javascript decoder using the `three.js` renderer. - -Please see the [javascript/example/README.md](javascript/example/README.md) file for more information. - -Support -======= - -For questions/comments please email - -If you have found an error in this library, please file an issue at - - -Patches are encouraged, and may be submitted by forking this project and -submitting a pull request through GitHub. See [CONTRIBUTING] for more detail. - -License -======= -Licensed under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy of -the License at - - - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations under -the License. - -References -========== -[example]:https://storage.googleapis.com/demos.webmproject.org/draco/draco_loader_throw.html -[meshes]: https://en.wikipedia.org/wiki/Polygon_mesh -[point clouds]: https://en.wikipedia.org/wiki/Point_cloud -[Bunny]: https://graphics.stanford.edu/data/3Dscanrep/ -[CONTRIBUTING]: https://raw.githubusercontent.com/google/draco/master/CONTRIBUTING.md - -Bunny model from Stanford's graphic department diff --git a/libs/assimp/contrib/draco/cmake/DracoConfig.cmake b/libs/assimp/contrib/draco/cmake/DracoConfig.cmake deleted file mode 100644 index be5e1fa..0000000 --- a/libs/assimp/contrib/draco/cmake/DracoConfig.cmake +++ /dev/null @@ -1,3 +0,0 @@ -@PACKAGE_INIT@ -set_and_check(draco_INCLUDE_DIR "@PACKAGE_draco_include_install_dir@") -set_and_check(draco_LIBRARY_DIR "@PACKAGE_draco_lib_install_dir@") diff --git a/libs/assimp/contrib/draco/cmake/FindDraco.cmake b/libs/assimp/contrib/draco/cmake/FindDraco.cmake deleted file mode 100644 index 0a91930..0000000 --- a/libs/assimp/contrib/draco/cmake/FindDraco.cmake +++ /dev/null @@ -1,56 +0,0 @@ -# Finddraco -# -# Locates draco and sets the following variables: -# -# draco_FOUND draco_INCLUDE_DIRS draco_LIBARY_DIRS draco_LIBRARIES -# draco_VERSION_STRING -# -# draco_FOUND is set to YES only when all other variables are successfully -# configured. - -unset(draco_FOUND) -unset(draco_INCLUDE_DIRS) -unset(draco_LIBRARY_DIRS) -unset(draco_LIBRARIES) -unset(draco_VERSION_STRING) - -mark_as_advanced(draco_FOUND) -mark_as_advanced(draco_INCLUDE_DIRS) -mark_as_advanced(draco_LIBRARY_DIRS) -mark_as_advanced(draco_LIBRARIES) -mark_as_advanced(draco_VERSION_STRING) - -set(draco_version_file_no_prefix "draco/src/draco/core/draco_version.h") - -# Set draco_INCLUDE_DIRS -find_path(draco_INCLUDE_DIRS NAMES "${draco_version_file_no_prefix}") - -# Extract the version string from draco_version.h. -if(draco_INCLUDE_DIRS) - set(draco_version_file - "${draco_INCLUDE_DIRS}/draco/src/draco/core/draco_version.h") - file(STRINGS "${draco_version_file}" draco_version REGEX "kdracoVersion") - list(GET draco_version 0 draco_version) - string(REPLACE "static const char kdracoVersion[] = " "" draco_version - "${draco_version}") - string(REPLACE ";" "" draco_version "${draco_version}") - string(REPLACE "\"" "" draco_version "${draco_version}") - set(draco_VERSION_STRING ${draco_version}) -endif() - -# Find the library. -if(BUILD_SHARED_LIBS) - find_library(draco_LIBRARIES NAMES draco.dll libdraco.dylib libdraco.so) -else() - find_library(draco_LIBRARIES NAMES draco.lib libdraco.a) -endif() - -# Store path to library. -get_filename_component(draco_LIBRARY_DIRS ${draco_LIBRARIES} DIRECTORY) - -if(draco_INCLUDE_DIRS - AND draco_LIBRARY_DIRS - AND draco_LIBRARIES - AND draco_VERSION_STRING) - set(draco_FOUND YES) -endif() diff --git a/libs/assimp/contrib/draco/cmake/compiler_flags.cmake b/libs/assimp/contrib/draco/cmake/compiler_flags.cmake deleted file mode 100644 index 8750e6f..0000000 --- a/libs/assimp/contrib/draco/cmake/compiler_flags.cmake +++ /dev/null @@ -1,220 +0,0 @@ -if(DRACO_CMAKE_COMPILER_FLAGS_CMAKE_) - return() -endif() -set(DRACO_CMAKE_COMPILER_FLAGS_CMAKE_ 1) - -include(CheckCCompilerFlag) -include(CheckCXXCompilerFlag) -include("${draco_root}/cmake/compiler_tests.cmake") - -# Strings used to cache failed C/CXX flags. -set(DRACO_FAILED_C_FLAGS) -set(DRACO_FAILED_CXX_FLAGS) - -# Checks C compiler for support of $c_flag. Adds $c_flag to $CMAKE_C_FLAGS when -# the compile test passes. Caches $c_flag in $DRACO_FAILED_C_FLAGS when the test -# fails. -macro(add_c_flag_if_supported c_flag) - unset(C_FLAG_FOUND CACHE) - string(FIND "${CMAKE_C_FLAGS}" "${c_flag}" C_FLAG_FOUND) - unset(C_FLAG_FAILED CACHE) - string(FIND "${DRACO_FAILED_C_FLAGS}" "${c_flag}" C_FLAG_FAILED) - - if(${C_FLAG_FOUND} EQUAL -1 AND ${C_FLAG_FAILED} EQUAL -1) - unset(C_FLAG_SUPPORTED CACHE) - message("Checking C compiler flag support for: " ${c_flag}) - check_c_compiler_flag("${c_flag}" C_FLAG_SUPPORTED) - if(${C_FLAG_SUPPORTED}) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${c_flag}" CACHE STRING "") - else() - set(DRACO_FAILED_C_FLAGS - "${DRACO_FAILED_C_FLAGS} ${c_flag}" - CACHE STRING "" FORCE) - endif() - endif() -endmacro() - -# Checks C++ compiler for support of $cxx_flag. Adds $cxx_flag to -# $CMAKE_CXX_FLAGS when the compile test passes. Caches $c_flag in -# $DRACO_FAILED_CXX_FLAGS when the test fails. -macro(add_cxx_flag_if_supported cxx_flag) - unset(CXX_FLAG_FOUND CACHE) - string(FIND "${CMAKE_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FOUND) - unset(CXX_FLAG_FAILED CACHE) - string(FIND "${DRACO_FAILED_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FAILED) - - if(${CXX_FLAG_FOUND} EQUAL -1 AND ${CXX_FLAG_FAILED} EQUAL -1) - unset(CXX_FLAG_SUPPORTED CACHE) - message("Checking CXX compiler flag support for: " ${cxx_flag}) - check_cxx_compiler_flag("${cxx_flag}" CXX_FLAG_SUPPORTED) - if(${CXX_FLAG_SUPPORTED}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${cxx_flag}" CACHE STRING "") - else() - set(DRACO_FAILED_CXX_FLAGS - "${DRACO_FAILED_CXX_FLAGS} ${cxx_flag}" - CACHE STRING "" FORCE) - endif() - endif() -endmacro() - -# Convenience method for adding a flag to both the C and C++ compiler command -# lines. -macro(add_compiler_flag_if_supported flag) - add_c_flag_if_supported(${flag}) - add_cxx_flag_if_supported(${flag}) -endmacro() - -# Checks C compiler for support of $c_flag and terminates generation when -# support is not present. -macro(require_c_flag c_flag update_c_flags) - unset(C_FLAG_FOUND CACHE) - string(FIND "${CMAKE_C_FLAGS}" "${c_flag}" C_FLAG_FOUND) - - if(${C_FLAG_FOUND} EQUAL -1) - unset(HAVE_C_FLAG CACHE) - message("Checking C compiler flag support for: " ${c_flag}) - check_c_compiler_flag("${c_flag}" HAVE_C_FLAG) - if(NOT ${HAVE_C_FLAG}) - message( - FATAL_ERROR "${PROJECT_NAME} requires support for C flag: ${c_flag}.") - endif() - if(${update_c_flags}) - set(CMAKE_C_FLAGS "${c_flag} ${CMAKE_C_FLAGS}" CACHE STRING "" FORCE) - endif() - endif() -endmacro() - -# Checks CXX compiler for support of $cxx_flag and terminates generation when -# support is not present. -macro(require_cxx_flag cxx_flag update_cxx_flags) - unset(CXX_FLAG_FOUND CACHE) - string(FIND "${CMAKE_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FOUND) - - if(${CXX_FLAG_FOUND} EQUAL -1) - unset(HAVE_CXX_FLAG CACHE) - message("Checking CXX compiler flag support for: " ${cxx_flag}) - check_cxx_compiler_flag("${cxx_flag}" HAVE_CXX_FLAG) - if(NOT ${HAVE_CXX_FLAG}) - message( - FATAL_ERROR - "${PROJECT_NAME} requires support for CXX flag: ${cxx_flag}.") - endif() - if(${update_cxx_flags}) - set(CMAKE_CXX_FLAGS - "${cxx_flag} ${CMAKE_CXX_FLAGS}" - CACHE STRING "" FORCE) - endif() - endif() -endmacro() - -# Checks for support of $flag by both the C and CXX compilers. Terminates -# generation when support is not present in both compilers. -macro(require_compiler_flag flag update_cmake_flags) - require_c_flag(${flag} ${update_cmake_flags}) - require_cxx_flag(${flag} ${update_cmake_flags}) -endmacro() - -# Checks only non-MSVC targets for support of $c_flag and terminates generation -# when support is not present. -macro(require_c_flag_nomsvc c_flag update_c_flags) - if(NOT MSVC) - require_c_flag(${c_flag} ${update_c_flags}) - endif() -endmacro() - -# Checks only non-MSVC targets for support of $cxx_flag and terminates -# generation when support is not present. -macro(require_cxx_flag_nomsvc cxx_flag update_cxx_flags) - if(NOT MSVC) - require_cxx_flag(${cxx_flag} ${update_cxx_flags}) - endif() -endmacro() - -# Checks only non-MSVC targets for support of $flag by both the C and CXX -# compilers. Terminates generation when support is not present in both -# compilers. -macro(require_compiler_flag_nomsvc flag update_cmake_flags) - require_c_flag_nomsvc(${flag} ${update_cmake_flags}) - require_cxx_flag_nomsvc(${flag} ${update_cmake_flags}) -endmacro() - -# Adds $flag to assembler command line. -macro(append_as_flag flag) - unset(AS_FLAG_FOUND CACHE) - string(FIND "${DRACO_AS_FLAGS}" "${flag}" AS_FLAG_FOUND) - - if(${AS_FLAG_FOUND} EQUAL -1) - set(DRACO_AS_FLAGS "${DRACO_AS_FLAGS} ${flag}") - endif() -endmacro() - -# Adds $flag to the C compiler command line. -macro(append_c_flag flag) - unset(C_FLAG_FOUND CACHE) - string(FIND "${CMAKE_C_FLAGS}" "${flag}" C_FLAG_FOUND) - - if(${C_FLAG_FOUND} EQUAL -1) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}") - endif() -endmacro() - -# Adds $flag to the CXX compiler command line. -macro(append_cxx_flag flag) - unset(CXX_FLAG_FOUND CACHE) - string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" CXX_FLAG_FOUND) - - if(${CXX_FLAG_FOUND} EQUAL -1) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") - endif() -endmacro() - -# Adds $flag to the C and CXX compiler command lines. -macro(append_compiler_flag flag) - append_c_flag(${flag}) - append_cxx_flag(${flag}) -endmacro() - -# Adds $flag to the executable linker command line. -macro(append_exe_linker_flag flag) - unset(LINKER_FLAG_FOUND CACHE) - string(FIND "${CMAKE_EXE_LINKER_FLAGS}" "${flag}" LINKER_FLAG_FOUND) - - if(${LINKER_FLAG_FOUND} EQUAL -1) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}") - endif() -endmacro() - -# Adds $flag to the link flags for $target. -function(append_link_flag_to_target target flags) - unset(target_link_flags) - get_target_property(target_link_flags ${target} LINK_FLAGS) - - if(target_link_flags) - unset(link_flag_found) - string(FIND "${target_link_flags}" "${flags}" link_flag_found) - - if(NOT ${link_flag_found} EQUAL -1) - return() - endif() - - set(target_link_flags "${target_link_flags} ${flags}") - else() - set(target_link_flags "${flags}") - endif() - - set_target_properties(${target} PROPERTIES LINK_FLAGS ${target_link_flags}) -endfunction() - -# Adds $flag to executable linker flags, and makes sure C/CXX builds still work. -macro(require_linker_flag flag) - append_exe_linker_flag(${flag}) - - unset(c_passed) - draco_check_c_compiles("LINKER_FLAG_C_TEST(${flag})" "" c_passed) - unset(cxx_passed) - draco_check_cxx_compiles("LINKER_FLAG_CXX_TEST(${flag})" "" cxx_passed) - - if(NOT c_passed OR NOT cxx_passed) - message(FATAL_ERROR "Linker flag test for ${flag} failed.") - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/compiler_tests.cmake b/libs/assimp/contrib/draco/cmake/compiler_tests.cmake deleted file mode 100644 index e781a65..0000000 --- a/libs/assimp/contrib/draco/cmake/compiler_tests.cmake +++ /dev/null @@ -1,103 +0,0 @@ -if(DRACO_CMAKE_COMPILER_TESTS_CMAKE_) - return() -endif() -set(DRACO_CMAKE_COMPILER_TESTS_CMAKE_ 1) - -include(CheckCSourceCompiles) -include(CheckCXXSourceCompiles) - -# The basic main() macro used in all compile tests. -set(DRACO_C_MAIN "\nint main(void) { return 0; }") -set(DRACO_CXX_MAIN "\nint main() { return 0; }") - -# Strings containing the names of passed and failed tests. -set(DRACO_C_PASSED_TESTS) -set(DRACO_C_FAILED_TESTS) -set(DRACO_CXX_PASSED_TESTS) -set(DRACO_CXX_FAILED_TESTS) - -macro(draco_push_var var new_value) - set(SAVED_${var} ${var}) - set(${var} ${new_value}) -endmacro() - -macro(draco_pop_var var) - set(var ${SAVED_${var}}) - unset(SAVED_${var}) -endmacro() - -# Confirms $test_source compiles and stores $test_name in one of -# $DRACO_C_PASSED_TESTS or $DRACO_C_FAILED_TESTS depending on out come. When the -# test passes $result_var is set to 1. When it fails $result_var is unset. The -# test is not run if the test name is found in either of the passed or failed -# test variables. -macro(draco_check_c_compiles test_name test_source result_var) - unset(C_TEST_PASSED CACHE) - unset(C_TEST_FAILED CACHE) - string(FIND "${DRACO_C_PASSED_TESTS}" "${test_name}" C_TEST_PASSED) - string(FIND "${DRACO_C_FAILED_TESTS}" "${test_name}" C_TEST_FAILED) - if(${C_TEST_PASSED} EQUAL -1 AND ${C_TEST_FAILED} EQUAL -1) - unset(C_TEST_COMPILED CACHE) - message("Running C compiler test: ${test_name}") - check_c_source_compiles("${test_source} ${DRACO_C_MAIN}" C_TEST_COMPILED) - set(${result_var} ${C_TEST_COMPILED}) - - if(${C_TEST_COMPILED}) - set(DRACO_C_PASSED_TESTS "${DRACO_C_PASSED_TESTS} ${test_name}") - else() - set(DRACO_C_FAILED_TESTS "${DRACO_C_FAILED_TESTS} ${test_name}") - message("C Compiler test ${test_name} failed.") - endif() - elseif(NOT ${C_TEST_PASSED} EQUAL -1) - set(${result_var} 1) - else() # ${C_TEST_FAILED} NOT EQUAL -1 - unset(${result_var}) - endif() -endmacro() - -# Confirms $test_source compiles and stores $test_name in one of -# $DRACO_CXX_PASSED_TESTS or $DRACO_CXX_FAILED_TESTS depending on out come. When -# the test passes $result_var is set to 1. When it fails $result_var is unset. -# The test is not run if the test name is found in either of the passed or -# failed test variables. -macro(draco_check_cxx_compiles test_name test_source result_var) - unset(CXX_TEST_PASSED CACHE) - unset(CXX_TEST_FAILED CACHE) - string(FIND "${DRACO_CXX_PASSED_TESTS}" "${test_name}" CXX_TEST_PASSED) - string(FIND "${DRACO_CXX_FAILED_TESTS}" "${test_name}" CXX_TEST_FAILED) - if(${CXX_TEST_PASSED} EQUAL -1 AND ${CXX_TEST_FAILED} EQUAL -1) - unset(CXX_TEST_COMPILED CACHE) - message("Running CXX compiler test: ${test_name}") - check_cxx_source_compiles("${test_source} ${DRACO_CXX_MAIN}" - CXX_TEST_COMPILED) - set(${result_var} ${CXX_TEST_COMPILED}) - - if(${CXX_TEST_COMPILED}) - set(DRACO_CXX_PASSED_TESTS "${DRACO_CXX_PASSED_TESTS} ${test_name}") - else() - set(DRACO_CXX_FAILED_TESTS "${DRACO_CXX_FAILED_TESTS} ${test_name}") - message("CXX Compiler test ${test_name} failed.") - endif() - elseif(NOT ${CXX_TEST_PASSED} EQUAL -1) - set(${result_var} 1) - else() # ${CXX_TEST_FAILED} NOT EQUAL -1 - unset(${result_var}) - endif() -endmacro() - -# Convenience macro that confirms $test_source compiles as C and C++. -# $result_var is set to 1 when both tests are successful, and 0 when one or both -# tests fail. Note: This macro is intended to be used to write to result -# variables that are expanded via configure_file(). $result_var is set to 1 or 0 -# to allow direct usage of the value in generated source files. -macro(draco_check_source_compiles test_name test_source result_var) - unset(C_PASSED) - unset(CXX_PASSED) - draco_check_c_compiles(${test_name} ${test_source} C_PASSED) - draco_check_cxx_compiles(${test_name} ${test_source} CXX_PASSED) - if(${C_PASSED} AND ${CXX_PASSED}) - set(${result_var} 1) - else() - set(${result_var} 0) - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco-config.cmake.template b/libs/assimp/contrib/draco/cmake/draco-config.cmake.template deleted file mode 100644 index ca4a456..0000000 --- a/libs/assimp/contrib/draco/cmake/draco-config.cmake.template +++ /dev/null @@ -1,2 +0,0 @@ -set(DRACO_INCLUDE_DIRS "@DRACO_INCLUDE_DIRS@") -set(DRACO_LIBRARIES "draco") diff --git a/libs/assimp/contrib/draco/cmake/draco.pc.template b/libs/assimp/contrib/draco/cmake/draco.pc.template deleted file mode 100644 index b8ae482..0000000 --- a/libs/assimp/contrib/draco/cmake/draco.pc.template +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: @PROJECT_NAME@ -Description: Draco geometry de(com)pression library. -Version: @DRACO_VERSION@ -Cflags: -I${includedir} -Libs: -L${libdir} -ldraco -Libs.private: @CMAKE_THREAD_LIBS_INIT@ diff --git a/libs/assimp/contrib/draco/cmake/draco_build_definitions.cmake b/libs/assimp/contrib/draco/cmake/draco_build_definitions.cmake deleted file mode 100644 index f7354c1..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_build_definitions.cmake +++ /dev/null @@ -1,124 +0,0 @@ -if(DRACO_CMAKE_DRACO_BUILD_DEFINITIONS_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_BUILD_DEFINITIONS_CMAKE_ -set(DRACO_CMAKE_DRACO_BUILD_DEFINITIONS_CMAKE_ 1) - -# Utility for controlling the main draco library dependency. This changes in -# shared builds, and when an optional target requires a shared library build. -macro(set_draco_target) - if(MSVC) - set(draco_dependency draco) - set(draco_plugin_dependency ${draco_dependency}) - else() - if(BUILD_SHARED_LIBS) - set(draco_dependency draco_shared) - else() - set(draco_dependency draco_static) - endif() - set(draco_plugin_dependency draco_static) - endif() - - if(BUILD_SHARED_LIBS) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - endif() -endmacro() - -# Configures flags and sets build system globals. -macro(draco_set_build_definitions) - string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lowercase) - - if(build_type_lowercase MATCHES "rel" AND DRACO_FAST) - if(MSVC) - list(APPEND draco_msvc_cxx_flags "/Ox") - else() - list(APPEND draco_base_cxx_flags "-O3") - endif() - endif() - - draco_load_version_info() - set(DRACO_SOVERSION 1) - - list(APPEND draco_include_paths "${draco_root}" "${draco_root}/src" - "${draco_build}") - - if(DRACO_ABSL) - list(APPEND draco_include_path "${draco_root}/third_party/abseil-cpp") - endif() - - - list(APPEND draco_gtest_include_paths - "${draco_root}/../googletest/googlemock/include" - "${draco_root}/../googletest/googlemock" - "${draco_root}/../googletest/googletest/include" - "${draco_root}/../googletest/googletest") - list(APPEND draco_test_include_paths ${draco_include_paths} - ${draco_gtest_include_paths}) - list(APPEND draco_defines "DRACO_CMAKE=1" - "DRACO_FLAGS_SRCDIR=\"${draco_root}\"" - "DRACO_FLAGS_TMPDIR=\"/tmp\"") - - if(MSVC OR WIN32) - list(APPEND draco_defines "_CRT_SECURE_NO_DEPRECATE=1" "NOMINMAX=1") - - if(BUILD_SHARED_LIBS) - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) - endif() - else() - if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) - # Ensure 64-bit platforms can support large files. - list(APPEND draco_defines "_LARGEFILE_SOURCE" "_FILE_OFFSET_BITS=64") - endif() - endif() - - if(ANDROID) - if(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a") - set(CMAKE_ANDROID_ARM_MODE ON) - endif() - endif() - - set_draco_target() - - if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6") - # Quiet warnings in copy-list-initialization where {} elision has always - # been allowed. - list(APPEND draco_clang_cxx_flags "-Wno-missing-braces") - endif() - endif() - - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "7") - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7") - # Quiet gcc 6 vs 7 abi warnings: - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728 - list(APPEND draco_base_cxx_flags "-Wno-psabi") - list(APPEND ABSL_GCC_FLAGS "-Wno-psabi") - endif() - endif() - endif() - - # Source file names ending in these suffixes will have the appropriate - # compiler flags added to their compile commands to enable intrinsics. - set(draco_neon_source_file_suffix "neon.cc") - set(draco_sse4_source_file_suffix "sse4.cc") - - if((${CMAKE_CXX_COMPILER_ID} - STREQUAL - "GNU" - AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 5) - OR (${CMAKE_CXX_COMPILER_ID} - STREQUAL - "Clang" - AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4)) - message( - WARNING "GNU/GCC < v5 or Clang/LLVM < v4, ENABLING COMPATIBILITY MODE.") - draco_enable_feature(FEATURE "DRACO_OLD_GCC") - endif() - - if(EMSCRIPTEN) - draco_check_emscripten_environment() - draco_get_required_emscripten_flags(FLAG_LIST_VAR draco_base_cxx_flags) - endif() - - draco_configure_sanitizer() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_cpu_detection.cmake b/libs/assimp/contrib/draco/cmake/draco_cpu_detection.cmake deleted file mode 100644 index 96e4a28..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_cpu_detection.cmake +++ /dev/null @@ -1,28 +0,0 @@ -if(DRACO_CMAKE_DRACO_CPU_DETECTION_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_CPU_DETECTION_CMAKE_ -set(DRACO_CMAKE_DRACO_CPU_DETECTION_CMAKE_ 1) - -# Detect optimizations available for the current target CPU. -macro(draco_optimization_detect) - if(DRACO_ENABLE_OPTIMIZATIONS) - string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" cpu_lowercase) - if(cpu_lowercase MATCHES "^arm|^aarch64") - set(draco_have_neon ON) - elseif(cpu_lowercase MATCHES "^x86|amd64") - set(draco_have_sse4 ON) - endif() - endif() - - if(draco_have_neon AND DRACO_ENABLE_NEON) - list(APPEND draco_defines "DRACO_ENABLE_NEON=1") - else() - list(APPEND draco_defines "DRACO_ENABLE_NEON=0") - endif() - - if(draco_have_sse4 AND DRACO_ENABLE_SSE4_1) - list(APPEND draco_defines "DRACO_ENABLE_SSE4_1=1") - else() - list(APPEND draco_defines "DRACO_ENABLE_SSE4_1=0") - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_emscripten.cmake b/libs/assimp/contrib/draco/cmake/draco_emscripten.cmake deleted file mode 100644 index 10c9350..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_emscripten.cmake +++ /dev/null @@ -1,185 +0,0 @@ -if(DRACO_CMAKE_DRACO_EMSCRIPTEN_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_EMSCRIPTEN_CMAKE_ - -# Checks environment for Emscripten prerequisites. -macro(draco_check_emscripten_environment) - if(NOT PYTHONINTERP_FOUND) - message( - FATAL_ERROR - "Python required for Emscripten builds, but cmake cannot find it.") - endif() - if(NOT EXISTS "$ENV{EMSCRIPTEN}") - message( - FATAL_ERROR - "The EMSCRIPTEN environment variable must be set. See README.md.") - endif() -endmacro() - -# Obtains the required Emscripten flags for Draco targets. -macro(draco_get_required_emscripten_flags) - set(em_FLAG_LIST_VAR) - set(em_flags) - set(em_single_arg_opts FLAG_LIST_VAR) - set(em_multi_arg_opts) - cmake_parse_arguments(em "${em_flags}" "${em_single_arg_opts}" - "${em_multi_arg_opts}" ${ARGN}) - if(NOT em_FLAG_LIST_VAR) - message(FATAL "draco_get_required_emscripten_flags: FLAG_LIST_VAR required") - endif() - - if(DRACO_JS_GLUE) - unset(required_flags) - list(APPEND ${em_FLAG_LIST_VAR} "-sALLOW_MEMORY_GROWTH=1") - list(APPEND ${em_FLAG_LIST_VAR} "-Wno-almost-asm") - list(APPEND ${em_FLAG_LIST_VAR} "--memory-init-file" "0") - list(APPEND ${em_FLAG_LIST_VAR} "-fno-omit-frame-pointer") - list(APPEND ${em_FLAG_LIST_VAR} "-sMODULARIZE=1") - list(APPEND ${em_FLAG_LIST_VAR} "-sNO_FILESYSTEM=1") - list(APPEND ${em_FLAG_LIST_VAR} "-sEXPORTED_RUNTIME_METHODS=[]") - list(APPEND ${em_FLAG_LIST_VAR} "-sPRECISE_F32=1") - list(APPEND ${em_FLAG_LIST_VAR} "-sNODEJS_CATCH_EXIT=0") - list(APPEND ${em_FLAG_LIST_VAR} "-sNODEJS_CATCH_REJECTION=0") - - if(DRACO_FAST) - list(APPEND ${em_FLAG_LIST_VAR} "--llvm-lto" "1") - endif() - if(DRACO_WASM) - list(APPEND ${em_FLAG_LIST_VAR} "-sWASM=1") - else() - list(APPEND ${em_FLAG_LIST_VAR} "-sWASM=0") - endif() - if(DRACO_IE_COMPATIBLE) - list(APPEND ${em_FLAG_LIST_VAR} "-sLEGACY_VM_SUPPORT=1") - endif() - endif() -endmacro() - -# Macro for generating C++ glue code from IDL for Emscripten targets. Executes -# python to generate the C++ binding, and establishes dendency: $OUTPUT_PATH.cpp -# on $INPUT_IDL. -macro(draco_generate_emscripten_glue) - set(glue_flags) - set(glue_single_arg_opts INPUT_IDL OUTPUT_PATH) - set(glue_multi_arg_opts) - cmake_parse_arguments(glue "${glue_flags}" "${glue_single_arg_opts}" - "${glue_multi_arg_opts}" ${ARGN}) - - if(DRACO_VERBOSE GREATER 1) - message("--------- draco_generate_emscripten_glue -----------\n" - "glue_INPUT_IDL=${glue_INPUT_IDL}\n" - "glue_OUTPUT_PATH=${glue_OUTPUT_PATH}\n" ] - "----------------------------------------------------\n") - endif() - - if(NOT glue_INPUT_IDL OR NOT glue_OUTPUT_PATH) - message( - FATAL_ERROR - "draco_generate_emscripten_glue: INPUT_IDL and OUTPUT_PATH required.") - endif() - - # Generate the glue source. - execute_process(COMMAND ${PYTHON_EXECUTABLE} - $ENV{EMSCRIPTEN}/tools/webidl_binder.py - ${glue_INPUT_IDL} ${glue_OUTPUT_PATH}) - if(NOT EXISTS "${glue_OUTPUT_PATH}.cpp") - message(FATAL_ERROR "JS glue generation failed for ${glue_INPUT_IDL}.") - endif() - - # Create a dependency so that it regenerated on edits. - add_custom_command(OUTPUT "${glue_OUTPUT_PATH}.cpp" - COMMAND ${PYTHON_EXECUTABLE} - $ENV{EMSCRIPTEN}/tools/webidl_binder.py - ${glue_INPUT_IDL} ${glue_OUTPUT_PATH} - DEPENDS ${draco_js_dec_idl} - COMMENT "Generating ${glue_OUTPUT_PATH}.cpp." - WORKING_DIRECTORY ${draco_build} - VERBATIM) -endmacro() - -# Wrapper for draco_add_executable() that handles the extra work necessary for -# emscripten targets when generating JS glue: -# -# ~~~ -# - Set source level dependency on the C++ binding. -# - Pre/Post link emscripten magic. -# -# Required args: -# - GLUE_PATH: Base path for glue file. Used to generate .cpp and .js files. -# - PRE_LINK_JS_SOURCES: em_link_pre_js() source files. -# - POST_LINK_JS_SOURCES: em_link_post_js() source files. -# Optional args: -# - FEATURES: -# ~~~ -macro(draco_add_emscripten_executable) - unset(emexe_NAME) - unset(emexe_FEATURES) - unset(emexe_SOURCES) - unset(emexe_DEFINES) - unset(emexe_INCLUDES) - unset(emexe_LINK_FLAGS) - set(optional_args) - set(single_value_args NAME GLUE_PATH) - set(multi_value_args SOURCES DEFINES FEATURES INCLUDES LINK_FLAGS - PRE_LINK_JS_SOURCES POST_LINK_JS_SOURCES) - - cmake_parse_arguments(emexe "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(NOT - (emexe_GLUE_PATH - AND emexe_POST_LINK_JS_SOURCES - AND emexe_PRE_LINK_JS_SOURCES)) - message(FATAL - "draco_add_emscripten_executable: GLUE_PATH PRE_LINK_JS_SOURCES " - "POST_LINK_JS_SOURCES args required.") - endif() - - if(DRACO_VERBOSE GREATER 1) - message("--------- draco_add_emscripten_executable ---------\n" - "emexe_NAME=${emexe_NAME}\n" - "emexe_SOURCES=${emexe_SOURCES}\n" - "emexe_DEFINES=${emexe_DEFINES}\n" - "emexe_INCLUDES=${emexe_INCLUDES}\n" - "emexe_LINK_FLAGS=${emexe_LINK_FLAGS}\n" - "emexe_GLUE_PATH=${emexe_GLUE_PATH}\n" - "emexe_FEATURES=${emexe_FEATURES}\n" - "emexe_PRE_LINK_JS_SOURCES=${emexe_PRE_LINK_JS_SOURCES}\n" - "emexe_POST_LINK_JS_SOURCES=${emexe_POST_LINK_JS_SOURCES}\n" - "----------------------------------------------------\n") - endif() - - # The Emscripten linker needs the C++ flags in addition to whatever has been - # passed in with the target. - list(APPEND emexe_LINK_FLAGS ${DRACO_CXX_FLAGS}) - - if(DRACO_GLTF) - draco_add_executable(NAME - ${emexe_NAME} - OUTPUT_NAME - ${emexe_NAME}_gltf - SOURCES - ${emexe_SOURCES} - DEFINES - ${emexe_DEFINES} - INCLUDES - ${emexe_INCLUDES} - LINK_FLAGS - ${emexe_LINK_FLAGS}) - else() - draco_add_executable(NAME ${emexe_NAME} SOURCES ${emexe_SOURCES} DEFINES - ${emexe_DEFINES} INCLUDES ${emexe_INCLUDES} LINK_FLAGS - ${emexe_LINK_FLAGS}) - endif() - - foreach(feature ${emexe_FEATURES}) - draco_enable_feature(FEATURE ${feature} TARGETS ${emexe_NAME}) - endforeach() - - set_property(SOURCE ${emexe_SOURCES} - APPEND - PROPERTY OBJECT_DEPENDS "${emexe_GLUE_PATH}.cpp") - em_link_pre_js(${emexe_NAME} ${emexe_PRE_LINK_JS_SOURCES}) - em_link_post_js(${emexe_NAME} "${emexe_GLUE_PATH}.js" - ${emexe_POST_LINK_JS_SOURCES}) -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_flags.cmake b/libs/assimp/contrib/draco/cmake/draco_flags.cmake deleted file mode 100644 index 0397859..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_flags.cmake +++ /dev/null @@ -1,247 +0,0 @@ -if(DRACO_CMAKE_DRACO_FLAGS_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_FLAGS_CMAKE_ -set(DRACO_CMAKE_DRACO_FLAGS_CMAKE_ 1) - -include(CheckCXXCompilerFlag) -include(CheckCXXSourceCompiles) - -# Adds compiler flags specified by FLAGS to the sources specified by SOURCES: -# -# draco_set_compiler_flags_for_sources(SOURCES FLAGS ) -macro(draco_set_compiler_flags_for_sources) - unset(compiler_SOURCES) - unset(compiler_FLAGS) - unset(optional_args) - unset(single_value_args) - set(multi_value_args SOURCES FLAGS) - cmake_parse_arguments(compiler "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(NOT (compiler_SOURCES AND compiler_FLAGS)) - draco_die("draco_set_compiler_flags_for_sources: SOURCES and " - "FLAGS required.") - endif() - - set_source_files_properties(${compiler_SOURCES} PROPERTIES COMPILE_FLAGS - ${compiler_FLAGS}) - - if(DRACO_VERBOSE GREATER 1) - foreach(source ${compiler_SOURCES}) - foreach(flag ${compiler_FLAGS}) - message("draco_set_compiler_flags_for_sources: source:${source} " - "flag:${flag}") - endforeach() - endforeach() - endif() -endmacro() - -# Tests compiler flags stored in list(s) specified by FLAG_LIST_VAR_NAMES, adds -# flags to $DRACO_CXX_FLAGS when tests pass. Terminates configuration if -# FLAG_REQUIRED is specified and any flag check fails. -# -# ~~~ -# draco_test_cxx_flag(> -# [FLAG_REQUIRED]) -# ~~~ -macro(draco_test_cxx_flag) - unset(cxx_test_FLAG_LIST_VAR_NAMES) - unset(cxx_test_FLAG_REQUIRED) - unset(single_value_args) - set(optional_args FLAG_REQUIRED) - set(multi_value_args FLAG_LIST_VAR_NAMES) - cmake_parse_arguments(cxx_test "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(NOT cxx_test_FLAG_LIST_VAR_NAMES) - draco_die("draco_test_cxx_flag: FLAG_LIST_VAR_NAMES required") - endif() - - unset(cxx_flags) - foreach(list_var ${cxx_test_FLAG_LIST_VAR_NAMES}) - if(DRACO_VERBOSE) - message("draco_test_cxx_flag: adding ${list_var} to cxx_flags") - endif() - list(APPEND cxx_flags ${${list_var}}) - endforeach() - - if(DRACO_VERBOSE) - message("CXX test: all flags: ${cxx_flags}") - endif() - - unset(all_cxx_flags) - list(APPEND all_cxx_flags ${DRACO_CXX_FLAGS} ${cxx_flags}) - - # Turn off output from check_cxx_source_compiles. Print status directly - # instead since the logging messages from check_cxx_source_compiles can be - # quite confusing. - set(CMAKE_REQUIRED_QUIET TRUE) - - # Run the actual compile test. - unset(draco_all_cxx_flags_pass CACHE) - message("--- Running combined CXX flags test, flags: ${all_cxx_flags}") - - # check_cxx_compiler_flag() requires that the flags are a string. When flags - # are passed as a list it will remove the list separators, and attempt to run - # a compile command using list entries concatenated together as a single - # argument. Avoid the problem by forcing the argument to be a string. - draco_set_and_stringify(SOURCE_VARS all_cxx_flags DEST all_cxx_flags) - check_cxx_compiler_flag("${all_cxx_flags}" draco_all_cxx_flags_pass) - - if(cxx_test_FLAG_REQUIRED AND NOT draco_all_cxx_flags_pass) - draco_die("Flag test failed for required flag(s): " - "${all_cxx_flags} and FLAG_REQUIRED specified.") - endif() - - if(draco_all_cxx_flags_pass) - # Test passed: update the global flag list used by the draco target creation - # wrappers. - set(DRACO_CXX_FLAGS ${cxx_flags}) - list(REMOVE_DUPLICATES DRACO_CXX_FLAGS) - - if(DRACO_VERBOSE) - message("DRACO_CXX_FLAGS=${DRACO_CXX_FLAGS}") - endif() - - message("--- Passed combined CXX flags test") - else() - message("--- Failed combined CXX flags test, testing flags individually.") - - if(cxx_flags) - message("--- Testing flags from $cxx_flags: " "${cxx_flags}") - foreach(cxx_flag ${cxx_flags}) - # Since 3.17.0 check_cxx_compiler_flag() sets a normal variable at - # parent scope while check_cxx_source_compiles() continues to set an - # internal cache variable, so we unset both to avoid the failure / - # success state persisting between checks. This has been fixed in newer - # CMake releases, but 3.17 is pretty common: we will need this to avoid - # weird build breakages while the fix propagates. - unset(cxx_flag_test_passed) - unset(cxx_flag_test_passed CACHE) - message("--- Testing flag: ${cxx_flag}") - check_cxx_compiler_flag("${cxx_flag}" cxx_flag_test_passed) - - if(cxx_flag_test_passed) - message("--- Passed test for ${cxx_flag}") - else() - list(REMOVE_ITEM cxx_flags ${cxx_flag}) - message("--- Failed test for ${cxx_flag}, flag removed.") - endif() - endforeach() - - set(DRACO_CXX_FLAGS ${cxx_flags}) - endif() - endif() - - if(DRACO_CXX_FLAGS) - list(REMOVE_DUPLICATES DRACO_CXX_FLAGS) - endif() -endmacro() - -# Tests executable linker flags stored in list specified by FLAG_LIST_VAR_NAME, -# adds flags to $DRACO_EXE_LINKER_FLAGS when test passes. Terminates -# configuration when flag check fails. draco_set_cxx_flags() must be called -# before calling this macro because it assumes $DRACO_CXX_FLAGS contains only -# valid CXX flags. -# -# draco_test_exe_linker_flag() -macro(draco_test_exe_linker_flag) - unset(link_FLAG_LIST_VAR_NAME) - unset(optional_args) - unset(multi_value_args) - set(single_value_args FLAG_LIST_VAR_NAME) - cmake_parse_arguments(link "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(NOT link_FLAG_LIST_VAR_NAME) - draco_die("draco_test_link_flag: FLAG_LIST_VAR_NAME required") - endif() - - draco_set_and_stringify(DEST linker_flags SOURCE_VARS - ${link_FLAG_LIST_VAR_NAME}) - - if(DRACO_VERBOSE) - message("EXE LINKER test: all flags: ${linker_flags}") - endif() - - # Tests of $DRACO_CXX_FLAGS have already passed. Include them with the linker - # test. - draco_set_and_stringify(DEST CMAKE_REQUIRED_FLAGS SOURCE_VARS DRACO_CXX_FLAGS) - - # Cache the global exe linker flags. - if(CMAKE_EXE_LINKER_FLAGS) - set(cached_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) - draco_set_and_stringify(DEST CMAKE_EXE_LINKER_FLAGS SOURCE ${linker_flags}) - endif() - - draco_set_and_stringify(DEST CMAKE_EXE_LINKER_FLAGS SOURCE ${linker_flags} - ${CMAKE_EXE_LINKER_FLAGS}) - - # Turn off output from check_cxx_source_compiles. Print status directly - # instead since the logging messages from check_cxx_source_compiles can be - # quite confusing. - set(CMAKE_REQUIRED_QUIET TRUE) - - message("--- Running EXE LINKER test for flags: ${linker_flags}") - - unset(linker_flag_test_passed CACHE) - set(draco_cxx_main "\nint main() { return 0; }") - check_cxx_source_compiles("${draco_cxx_main}" linker_flag_test_passed) - - if(NOT linker_flag_test_passed) - draco_die("EXE LINKER test failed.") - endif() - - message("--- Passed EXE LINKER flag test.") - - # Restore cached global exe linker flags. - if(cached_CMAKE_EXE_LINKER_FLAGS) - set(CMAKE_EXE_LINKER_FLAGS ${cached_CMAKE_EXE_LINKER_FLAGS}) - else() - unset(CMAKE_EXE_LINKER_FLAGS) - endif() - - list(APPEND DRACO_EXE_LINKER_FLAGS ${${link_FLAG_LIST_VAR_NAME}}) - list(REMOVE_DUPLICATES DRACO_EXE_LINKER_FLAGS) -endmacro() - -# Runs the draco compiler tests. This macro builds up the list of list var(s) -# that is passed to draco_test_cxx_flag(). -# -# Note: draco_set_build_definitions() must be called before this macro. -macro(draco_set_cxx_flags) - unset(cxx_flag_lists) - - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") - list(APPEND cxx_flag_lists draco_base_cxx_flags) - endif() - - # Append clang flags after the base set to allow -Wno* overrides to take - # effect. Some of the base flags may enable a large set of warnings, e.g., - # -Wall. - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - list(APPEND cxx_flag_lists draco_clang_cxx_flags) - endif() - - if(MSVC) - list(APPEND cxx_flag_lists draco_msvc_cxx_flags) - endif() - - draco_set_and_stringify(DEST cxx_flags SOURCE_VARS ${cxx_flag_lists}) - if(DRACO_VERBOSE) - message("draco_set_cxx_flags: internal CXX flags: ${cxx_flags}") - endif() - - if(DRACO_CXX_FLAGS) - list(APPEND cxx_flag_lists DRACO_CXX_FLAGS) - if(DRACO_VERBOSE) - message("draco_set_cxx_flags: user CXX flags: ${DRACO_CXX_FLAGS}") - endif() - endif() - - draco_set_and_stringify(DEST cxx_flags SOURCE_VARS ${cxx_flag_lists}) - - if(cxx_flags) - draco_test_cxx_flag(FLAG_LIST_VAR_NAMES ${cxx_flag_lists}) - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_helpers.cmake b/libs/assimp/contrib/draco/cmake/draco_helpers.cmake deleted file mode 100644 index 0b3b804..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_helpers.cmake +++ /dev/null @@ -1,110 +0,0 @@ -if(DRACO_CMAKE_DRACO_HELPERS_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_HELPERS_CMAKE_ -set(DRACO_CMAKE_DRACO_HELPERS_CMAKE_ 1) - -# Kills build generation using message(FATAL_ERROR) and outputs all data passed -# to the console via use of $ARGN. -macro(draco_die) - message(FATAL_ERROR ${ARGN}) -endmacro() - -# Converts semi-colon delimited list variable(s) to string. Output is written to -# variable supplied via the DEST parameter. Input is from an expanded variable -# referenced by SOURCE and/or variable(s) referenced by SOURCE_VARS. -macro(draco_set_and_stringify) - set(optional_args) - set(single_value_args DEST SOURCE_VAR) - set(multi_value_args SOURCE SOURCE_VARS) - cmake_parse_arguments(sas "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(NOT sas_DEST OR NOT (sas_SOURCE OR sas_SOURCE_VARS)) - draco_die("draco_set_and_stringify: DEST and at least one of SOURCE " - "SOURCE_VARS required.") - endif() - - unset(${sas_DEST}) - - if(sas_SOURCE) - # $sas_SOURCE is one or more expanded variables, just copy the values to - # $sas_DEST. - set(${sas_DEST} "${sas_SOURCE}") - endif() - - if(sas_SOURCE_VARS) - # $sas_SOURCE_VARS is one or more variable names. Each iteration expands a - # variable and appends it to $sas_DEST. - foreach(source_var ${sas_SOURCE_VARS}) - set(${sas_DEST} "${${sas_DEST}} ${${source_var}}") - endforeach() - - # Because $sas_DEST can be empty when entering this scope leading whitespace - # can be introduced to $sas_DEST on the first iteration of the above loop. - # Remove it: - string(STRIP "${${sas_DEST}}" ${sas_DEST}) - endif() - - # Lists in CMake are simply semicolon delimited strings, so stringification is - # just a find and replace of the semicolon. - string(REPLACE ";" " " ${sas_DEST} "${${sas_DEST}}") - - if(DRACO_VERBOSE GREATER 1) - message("draco_set_and_stringify: ${sas_DEST}=${${sas_DEST}}") - endif() -endmacro() - -# Creates a dummy source file in $DRACO_GENERATED_SOURCES_DIRECTORY and adds it -# to the specified target. Optionally adds its path to a list variable. -# -# draco_create_dummy_source_file( BASENAME > -# [LISTVAR ]) -macro(draco_create_dummy_source_file) - set(optional_args) - set(single_value_args TARGET BASENAME LISTVAR) - set(multi_value_args) - cmake_parse_arguments(cdsf "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(NOT cdsf_TARGET OR NOT cdsf_BASENAME) - draco_die("draco_create_dummy_source_file: TARGET and BASENAME required.") - endif() - - if(NOT DRACO_GENERATED_SOURCES_DIRECTORY) - set(DRACO_GENERATED_SOURCES_DIRECTORY "${draco_build}/gen_src") - endif() - - set(dummy_source_dir "${DRACO_GENERATED_SOURCES_DIRECTORY}") - set(dummy_source_file - "${dummy_source_dir}/draco_${cdsf_TARGET}_${cdsf_BASENAME}.cc") - set(dummy_source_code - "// Generated file. DO NOT EDIT!\n" - "// C++ source file created for target ${cdsf_TARGET}.\n" - "void draco_${cdsf_TARGET}_${cdsf_BASENAME}_dummy_function(void)\;\n" - "void draco_${cdsf_TARGET}_${cdsf_BASENAME}_dummy_function(void) {}\n") - file(WRITE "${dummy_source_file}" ${dummy_source_code}) - - target_sources(${cdsf_TARGET} PRIVATE ${dummy_source_file}) - - if(cdsf_LISTVAR) - list(APPEND ${cdsf_LISTVAR} "${dummy_source_file}") - endif() -endmacro() - -# Loads the version string from $draco_source/draco/version.h and sets -# $DRACO_VERSION. -macro(draco_load_version_info) - file(STRINGS "${draco_src_root}/core/draco_version.h" version_file_strings) - foreach(str ${version_file_strings}) - if(str MATCHES "char kDracoVersion") - string(FIND "${str}" "\"" open_quote_pos) - string(FIND "${str}" ";" semicolon_pos) - math(EXPR open_quote_pos "${open_quote_pos} + 1") - math(EXPR close_quote_pos "${semicolon_pos} - 1") - math(EXPR version_string_length "${close_quote_pos} - ${open_quote_pos}") - string(SUBSTRING "${str}" ${open_quote_pos} ${version_string_length} - DRACO_VERSION) - break() - endif() - endforeach() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_install.cmake b/libs/assimp/contrib/draco/cmake/draco_install.cmake deleted file mode 100644 index 09bfb59..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_install.cmake +++ /dev/null @@ -1,79 +0,0 @@ -if(DRACO_CMAKE_DRACO_INSTALL_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_INSTALL_CMAKE_ -set(DRACO_CMAKE_DRACO_INSTALL_CMAKE_ 1) - -# Sets up the draco install targets. Must be called after the static library -# target is created. -macro(draco_setup_install_target) - include(GNUInstallDirs) - - # pkg-config: draco.pc - set(prefix "${CMAKE_INSTALL_PREFIX}") - set(exec_prefix "\${prefix}") - set(libdir "\${prefix}/${CMAKE_INSTALL_LIBDIR}") - set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") - set(draco_lib_name "draco") - - configure_file("${draco_root}/cmake/draco.pc.template" - "${draco_build}/draco.pc" @ONLY NEWLINE_STYLE UNIX) - install(FILES "${draco_build}/draco.pc" - DESTINATION "${prefix}/${CMAKE_INSTALL_LIBDIR}/pkgconfig") - - # CMake config: draco-config.cmake - set(DRACO_INCLUDE_DIRS "${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") - configure_file("${draco_root}/cmake/draco-config.cmake.template" - "${draco_build}/draco-config.cmake" @ONLY NEWLINE_STYLE UNIX) - install( - FILES "${draco_build}/draco-config.cmake" - DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/cmake") - - foreach(file ${draco_sources}) - if(file MATCHES "h$") - list(APPEND draco_api_includes ${file}) - endif() - endforeach() - - # Strip $draco_src_root from the file paths: we need to install relative to - # $include_directory. - list(TRANSFORM draco_api_includes REPLACE "${draco_src_root}/" "") - set(include_directory "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") - - foreach(draco_api_include ${draco_api_includes}) - get_filename_component(file_directory ${draco_api_include} DIRECTORY) - set(target_directory "${include_directory}/draco/${file_directory}") - install(FILES ${draco_src_root}/${draco_api_include} - DESTINATION "${target_directory}") - endforeach() - - install( - FILES "${draco_build}/draco/draco_features.h" - DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/draco/") - - install(TARGETS draco_decoder DESTINATION - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}") - install(TARGETS draco_encoder DESTINATION - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}") - - if(MSVC) - install(TARGETS draco DESTINATION - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") - else() - install(TARGETS draco_static DESTINATION - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") - if(BUILD_SHARED_LIBS) - install(TARGETS draco_shared DESTINATION - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") - endif() - endif() - - if(DRACO_UNITY_PLUGIN) - install(TARGETS dracodec_unity DESTINATION - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") - endif() - if(DRACO_MAYA_PLUGIN) - install(TARGETS draco_maya_wrapper DESTINATION - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") - endif() - -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_intrinsics.cmake b/libs/assimp/contrib/draco/cmake/draco_intrinsics.cmake deleted file mode 100644 index 9011c0d..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_intrinsics.cmake +++ /dev/null @@ -1,96 +0,0 @@ -if(DRACO_CMAKE_DRACO_INTRINSICS_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_INTRINSICS_CMAKE_ -set(DRACO_CMAKE_DRACO_INTRINSICS_CMAKE_ 1) - -# Returns the compiler flag for the SIMD intrinsics suffix specified by the -# SUFFIX argument via the variable specified by the VARIABLE argument: -# draco_get_intrinsics_flag_for_suffix(SUFFIX VARIABLE ) -macro(draco_get_intrinsics_flag_for_suffix) - unset(intrinsics_SUFFIX) - unset(intrinsics_VARIABLE) - unset(optional_args) - unset(multi_value_args) - set(single_value_args SUFFIX VARIABLE) - cmake_parse_arguments(intrinsics "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(NOT (intrinsics_SUFFIX AND intrinsics_VARIABLE)) - message(FATAL_ERROR "draco_get_intrinsics_flag_for_suffix: SUFFIX and " - "VARIABLE required.") - endif() - - if(intrinsics_SUFFIX MATCHES "neon") - if(NOT MSVC) - set(${intrinsics_VARIABLE} "${DRACO_NEON_INTRINSICS_FLAG}") - endif() - elseif(intrinsics_SUFFIX MATCHES "sse4") - if(NOT MSVC) - set(${intrinsics_VARIABLE} "-msse4.1") - endif() - else() - message(FATAL_ERROR "draco_get_intrinsics_flag_for_suffix: Unknown " - "instrinics suffix: ${intrinsics_SUFFIX}") - endif() - - if(DRACO_VERBOSE GREATER 1) - message("draco_get_intrinsics_flag_for_suffix: " - "suffix:${intrinsics_SUFFIX} flag:${${intrinsics_VARIABLE}}") - endif() -endmacro() - -# Processes source files specified by SOURCES and adds intrinsics flags as -# necessary: draco_process_intrinsics_sources(SOURCES ) -# -# Detects requirement for intrinsics flags using source file name suffix. -# Currently supports only SSE4.1. -macro(draco_process_intrinsics_sources) - unset(arg_TARGET) - unset(arg_SOURCES) - unset(optional_args) - set(single_value_args TARGET) - set(multi_value_args SOURCES) - cmake_parse_arguments(arg "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - if(NOT (arg_TARGET AND arg_SOURCES)) - message(FATAL_ERROR "draco_process_intrinsics_sources: TARGET and " - "SOURCES required.") - endif() - - if(DRACO_ENABLE_SSE4_1 AND draco_have_sse4) - unset(sse4_sources) - list(APPEND sse4_sources ${arg_SOURCES}) - - list(FILTER sse4_sources INCLUDE REGEX - "${draco_sse4_source_file_suffix}$") - - if(sse4_sources) - unset(sse4_flags) - draco_get_intrinsics_flag_for_suffix(SUFFIX - ${draco_sse4_source_file_suffix} - VARIABLE sse4_flags) - if(sse4_flags) - draco_set_compiler_flags_for_sources(SOURCES ${sse4_sources} FLAGS - ${sse4_flags}) - endif() - endif() - endif() - - if(DRACO_ENABLE_NEON AND draco_have_neon) - unset(neon_sources) - list(APPEND neon_sources ${arg_SOURCES}) - list(FILTER neon_sources INCLUDE REGEX - "${draco_neon_source_file_suffix}$") - - if(neon_sources AND DRACO_NEON_INTRINSICS_FLAG) - unset(neon_flags) - draco_get_intrinsics_flag_for_suffix(SUFFIX - ${draco_neon_source_file_suffix} - VARIABLE neon_flags) - if(neon_flags) - draco_set_compiler_flags_for_sources(SOURCES ${neon_sources} FLAGS - ${neon_flags}) - endif() - endif() - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_options.cmake b/libs/assimp/contrib/draco/cmake/draco_options.cmake deleted file mode 100644 index 832bfb6..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_options.cmake +++ /dev/null @@ -1,239 +0,0 @@ -if(DRACO_CMAKE_DRACO_OPTIONS_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_OPTIONS_CMAKE_ -set(DRACO_CMAKE_DRACO_OPTIONS_CMAKE_) - -set(draco_features_file_name "${draco_build}/draco/draco_features.h") -set(draco_features_list) - -# Simple wrapper for CMake's builtin option command that tracks draco's build -# options in the list variable $draco_options. -macro(draco_option) - unset(option_NAME) - unset(option_HELPSTRING) - unset(option_VALUE) - unset(optional_args) - unset(multi_value_args) - set(single_value_args NAME HELPSTRING VALUE) - cmake_parse_arguments(option "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(NOT (option_NAME AND option_HELPSTRING AND DEFINED option_VALUE)) - message(FATAL_ERROR "draco_option: NAME HELPSTRING and VALUE required.") - endif() - - option(${option_NAME} ${option_HELPSTRING} ${option_VALUE}) - - if(DRACO_VERBOSE GREATER 2) - message("--------- draco_option ---------\n" "option_NAME=${option_NAME}\n" - "option_HELPSTRING=${option_HELPSTRING}\n" - "option_VALUE=${option_VALUE}\n" - "------------------------------------------\n") - endif() - - list(APPEND draco_options ${option_NAME}) - list(REMOVE_DUPLICATES draco_options) -endmacro() - -# Dumps the $draco_options list via CMake message command. -macro(draco_dump_options) - foreach(option_name ${draco_options}) - message("${option_name}: ${${option_name}}") - endforeach() -endmacro() - -# Set default options. -macro(draco_set_default_options) - draco_option(NAME DRACO_FAST HELPSTRING "Try to build faster libs." VALUE OFF) - draco_option(NAME DRACO_JS_GLUE HELPSTRING - "Enable JS Glue and JS targets when using Emscripten." VALUE ON) - draco_option(NAME DRACO_IE_COMPATIBLE HELPSTRING - "Enable support for older IE builds when using Emscripten." VALUE - OFF) - draco_option(NAME DRACO_MESH_COMPRESSION HELPSTRING "Enable mesh compression." - VALUE ON) - draco_option(NAME DRACO_POINT_CLOUD_COMPRESSION HELPSTRING - "Enable point cloud compression." VALUE ON) - draco_option(NAME DRACO_PREDICTIVE_EDGEBREAKER HELPSTRING - "Enable predictive edgebreaker." VALUE ON) - draco_option(NAME DRACO_STANDARD_EDGEBREAKER HELPSTRING - "Enable stand edgebreaker." VALUE ON) - draco_option(NAME DRACO_BACKWARDS_COMPATIBILITY HELPSTRING - "Enable backwards compatibility." VALUE ON) - draco_option(NAME DRACO_DECODER_ATTRIBUTE_DEDUPLICATION HELPSTRING - "Enable attribute deduping." VALUE OFF) - draco_option(NAME DRACO_TESTS HELPSTRING "Enables tests." VALUE OFF) - draco_option(NAME DRACO_WASM HELPSTRING "Enables WASM support." VALUE OFF) - draco_option(NAME DRACO_UNITY_PLUGIN HELPSTRING - "Build plugin library for Unity." VALUE OFF) - draco_option(NAME DRACO_ANIMATION_ENCODING HELPSTRING "Enable animation." - VALUE OFF) - draco_option(NAME DRACO_GLTF HELPSTRING "Support GLTF." VALUE OFF) - draco_option(NAME DRACO_MAYA_PLUGIN HELPSTRING - "Build plugin library for Maya." VALUE OFF) - draco_check_deprecated_options() -endmacro() - -# Warns when a deprecated option is used and sets the option that replaced it. -macro(draco_handle_deprecated_option) - unset(option_OLDNAME) - unset(option_NEWNAME) - unset(optional_args) - unset(multi_value_args) - set(single_value_args OLDNAME NEWNAME) - cmake_parse_arguments(option "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if("${${option_OLDNAME}}") - message(WARNING "${option_OLDNAME} is deprecated. Use ${option_NEWNAME}.") - set(${option_NEWNAME} ${${option_OLDNAME}}) - endif() -endmacro() - -# Checks for use of deprecated options. -macro(draco_check_deprecated_options) - draco_handle_deprecated_option(OLDNAME ENABLE_EXTRA_SPEED NEWNAME DRACO_FAST) - draco_handle_deprecated_option(OLDNAME ENABLE_JS_GLUE NEWNAME DRACO_JS_GLUE) - draco_handle_deprecated_option(OLDNAME ENABLE_MESH_COMPRESSION NEWNAME - DRACO_MESH_COMPRESSION) - draco_handle_deprecated_option(OLDNAME ENABLE_POINT_CLOUD_COMPRESSION NEWNAME - DRACO_POINT_CLOUD_COMPRESSION) - draco_handle_deprecated_option(OLDNAME ENABLE_PREDICTIVE_EDGEBREAKER NEWNAME - DRACO_PREDICTIVE_EDGEBREAKER) - draco_handle_deprecated_option(OLDNAME ENABLE_STANDARD_EDGEBREAKER NEWNAME - DRACO_STANDARD_EDGEBREAKER) - draco_handle_deprecated_option(OLDNAME ENABLE_BACKWARDS_COMPATIBILITY NEWNAME - DRACO_BACKWARDS_COMPATIBILITY) - draco_handle_deprecated_option(OLDNAME ENABLE_DECODER_ATTRIBUTE_DEDUPLICATION - NEWNAME DRACO_DECODER_ATTRIBUTE_DEDUPLICATION) - draco_handle_deprecated_option(OLDNAME ENABLE_TESTS NEWNAME DRACO_TESTS) - draco_handle_deprecated_option(OLDNAME ENABLE_WASM NEWNAME DRACO_WASM) - draco_handle_deprecated_option(OLDNAME BUILD_UNITY_PLUGIN NEWNAME - DRACO_UNITY_PLUGIN) - draco_handle_deprecated_option(OLDNAME BUILD_ANIMATION_ENCODING NEWNAME - DRACO_ANIMATION_ENCODING) - draco_handle_deprecated_option(OLDNAME BUILD_FOR_GLTF NEWNAME DRACO_GLTF) - draco_handle_deprecated_option(OLDNAME BUILD_MAYA_PLUGIN NEWNAME - DRACO_MAYA_PLUGIN) - draco_handle_deprecated_option(OLDNAME BUILD_USD_PLUGIN NEWNAME - BUILD_SHARED_LIBS) - -endmacro() - -# Macro for setting Draco features based on user configuration. Features enabled -# by this macro are Draco global. -macro(draco_set_optional_features) - if(DRACO_GLTF) - # Override settings when building for GLTF. - draco_enable_feature(FEATURE "DRACO_MESH_COMPRESSION_SUPPORTED") - draco_enable_feature(FEATURE "DRACO_NORMAL_ENCODING_SUPPORTED") - draco_enable_feature(FEATURE "DRACO_STANDARD_EDGEBREAKER_SUPPORTED") - else() - if(DRACO_POINT_CLOUD_COMPRESSION) - draco_enable_feature(FEATURE "DRACO_POINT_CLOUD_COMPRESSION_SUPPORTED") - endif() - if(DRACO_MESH_COMPRESSION) - draco_enable_feature(FEATURE "DRACO_MESH_COMPRESSION_SUPPORTED") - draco_enable_feature(FEATURE "DRACO_NORMAL_ENCODING_SUPPORTED") - - if(DRACO_STANDARD_EDGEBREAKER) - draco_enable_feature(FEATURE "DRACO_STANDARD_EDGEBREAKER_SUPPORTED") - endif() - if(DRACO_PREDICTIVE_EDGEBREAKER) - draco_enable_feature(FEATURE "DRACO_PREDICTIVE_EDGEBREAKER_SUPPORTED") - endif() - endif() - - if(DRACO_BACKWARDS_COMPATIBILITY) - draco_enable_feature(FEATURE "DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED") - endif() - - - if(NOT EMSCRIPTEN) - # For now, enable deduplication for both encoder and decoder. - # TODO(ostava): Support for disabling attribute deduplication for the C++ - # decoder is planned in future releases. - draco_enable_feature(FEATURE - DRACO_ATTRIBUTE_INDICES_DEDUPLICATION_SUPPORTED) - draco_enable_feature(FEATURE - DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED) - endif() - endif() - - if(DRACO_UNITY_PLUGIN) - draco_enable_feature(FEATURE "DRACO_UNITY_PLUGIN") - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - endif() - - if(DRACO_MAYA_PLUGIN) - draco_enable_feature(FEATURE "DRACO_MAYA_PLUGIN") - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - endif() - -endmacro() - -# Macro that handles tracking of Draco preprocessor symbols for the purpose of -# producing draco_features.h. -# -# ~~~ -# draco_enable_feature(FEATURE [TARGETS ]) -# ~~~ -# -# FEATURE is required. It should be a Draco preprocessor symbol. TARGETS is -# optional. It can be one or more draco targets. -# -# When the TARGETS argument is not present the preproc symbol is added to -# draco_features.h. When it is draco_features.h is unchanged, and -# target_compile_options() is called for each target specified. -macro(draco_enable_feature) - set(def_flags) - set(def_single_arg_opts FEATURE) - set(def_multi_arg_opts TARGETS) - cmake_parse_arguments(DEF "${def_flags}" "${def_single_arg_opts}" - "${def_multi_arg_opts}" ${ARGN}) - if("${DEF_FEATURE}" STREQUAL "") - message(FATAL_ERROR "Empty FEATURE passed to draco_enable_feature().") - endif() - - # Do nothing/return early if $DEF_FEATURE is already in the list. - list(FIND draco_features_list ${DEF_FEATURE} df_index) - if(NOT df_index EQUAL -1) - return() - endif() - - list(LENGTH DEF_TARGETS df_targets_list_length) - if(${df_targets_list_length} EQUAL 0) - list(APPEND draco_features_list ${DEF_FEATURE}) - else() - foreach(target ${DEF_TARGETS}) - target_compile_definitions(${target} PRIVATE ${DEF_FEATURE}) - endforeach() - endif() -endmacro() - -# Function for generating draco_features.h. -function(draco_generate_features_h) - file(WRITE "${draco_features_file_name}.new" - "// GENERATED FILE -- DO NOT EDIT\n\n" "#ifndef DRACO_FEATURES_H_\n" - "#define DRACO_FEATURES_H_\n\n") - - foreach(feature ${draco_features_list}) - file(APPEND "${draco_features_file_name}.new" "#define ${feature}\n") - endforeach() - - file(APPEND "${draco_features_file_name}.new" - "\n#endif // DRACO_FEATURES_H_") - - # Will replace ${draco_features_file_name} only if the file content has - # changed. This prevents forced Draco rebuilds after CMake runs. - configure_file("${draco_features_file_name}.new" - "${draco_features_file_name}") - file(REMOVE "${draco_features_file_name}.new") -endfunction() - -# Sets default options for the build and processes user controlled options to -# compute enabled features. -macro(draco_setup_options) - draco_set_default_options() - draco_set_optional_features() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake b/libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake deleted file mode 100644 index d2e41a6..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake +++ /dev/null @@ -1,32 +0,0 @@ -if(DRACO_CMAKE_DRACO_SANITIZER_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_SANITIZER_CMAKE_ -set(DRACO_CMAKE_DRACO_SANITIZER_CMAKE_ 1) - -# Handles the details of enabling sanitizers. -macro(draco_configure_sanitizer) - if(DRACO_SANITIZE AND NOT EMSCRIPTEN AND NOT MSVC) - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - if(DRACO_SANITIZE MATCHES "cfi") - list(APPEND SAN_CXX_FLAGS "-flto" "-fno-sanitize-trap=cfi") - list(APPEND SAN_LINKER_FLAGS "-flto" "-fno-sanitize-trap=cfi" - "-fuse-ld=gold") - endif() - - if(${CMAKE_SIZEOF_VOID_P} EQUAL 4 - AND DRACO_SANITIZE MATCHES "integer|undefined") - list(APPEND SAN_LINKER_FLAGS "--rtlib=compiler-rt" "-lgcc_s") - endif() - endif() - - list(APPEND SAN_CXX_FLAGS "-fsanitize=${DRACO_SANITIZE}") - list(APPEND SAN_LINKER_FLAGS "-fsanitize=${DRACO_SANITIZE}") - - # Make sanitizer callstacks accurate. - list(APPEND SAN_CXX_FLAGS "-fno-omit-frame-pointer") - list(APPEND SAN_CXX_FLAGS "-fno-optimize-sibling-calls") - - draco_test_cxx_flag(FLAG_LIST_VAR_NAMES SAN_CXX_FLAGS FLAG_REQUIRED) - draco_test_exe_linker_flag(FLAG_LIST_VAR_NAME SAN_LINKER_FLAGS) - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_targets.cmake b/libs/assimp/contrib/draco/cmake/draco_targets.cmake deleted file mode 100644 index 0456c4d..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_targets.cmake +++ /dev/null @@ -1,355 +0,0 @@ -if(DRACO_CMAKE_DRACO_TARGETS_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_TARGETS_CMAKE_ -set(DRACO_CMAKE_DRACO_TARGETS_CMAKE_ 1) - -# Resets list variables used to track draco targets. -macro(draco_reset_target_lists) - unset(draco_targets) - unset(draco_exe_targets) - unset(draco_lib_targets) - unset(draco_objlib_targets) - unset(draco_module_targets) - unset(draco_sources) - unset(draco_test_targets) -endmacro() - -# Creates an executable target. The target name is passed as a parameter to the -# NAME argument, and the sources passed as a parameter to the SOURCES argument: -# draco_add_executable(NAME SOURCES [optional args]) -# -# Optional args: -# cmake-format: off -# - OUTPUT_NAME: Override output file basename. Target basename defaults to -# NAME. -# - TEST: Flag. Presence means treat executable as a test. -# - DEFINES: List of preprocessor macro definitions. -# - INCLUDES: list of include directories for the target. -# - COMPILE_FLAGS: list of compiler flags for the target. -# - LINK_FLAGS: List of linker flags for the target. -# - OBJLIB_DEPS: List of CMake object library target dependencies. -# - LIB_DEPS: List of CMake library dependencies. -# cmake-format: on -# -# Sources passed to this macro are added to $draco_test_sources when TEST is -# specified. Otherwise sources are added to $draco_sources. -# -# Targets passed to this macro are always added to the $draco_targets list. When -# TEST is specified targets are also added to the $draco_test_targets list. -# Otherwise targets are added to $draco_exe_targets. -macro(draco_add_executable) - unset(exe_TEST) - unset(exe_TEST_DEFINES_MAIN) - unset(exe_NAME) - unset(exe_OUTPUT_NAME) - unset(exe_SOURCES) - unset(exe_DEFINES) - unset(exe_INCLUDES) - unset(exe_COMPILE_FLAGS) - unset(exe_LINK_FLAGS) - unset(exe_OBJLIB_DEPS) - unset(exe_LIB_DEPS) - set(optional_args TEST) - set(single_value_args NAME OUTPUT_NAME) - set(multi_value_args SOURCES DEFINES INCLUDES COMPILE_FLAGS LINK_FLAGS - OBJLIB_DEPS LIB_DEPS) - - cmake_parse_arguments(exe "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(DRACO_VERBOSE GREATER 1) - message("--------- draco_add_executable ---------\n" - "exe_TEST=${exe_TEST}\n" - "exe_TEST_DEFINES_MAIN=${exe_TEST_DEFINES_MAIN}\n" - "exe_NAME=${exe_NAME}\n" - "exe_OUTPUT_NAME=${exe_OUTPUT_NAME}\n" - "exe_SOURCES=${exe_SOURCES}\n" - "exe_DEFINES=${exe_DEFINES}\n" - "exe_INCLUDES=${exe_INCLUDES}\n" - "exe_COMPILE_FLAGS=${exe_COMPILE_FLAGS}\n" - "exe_LINK_FLAGS=${exe_LINK_FLAGS}\n" - "exe_OBJLIB_DEPS=${exe_OBJLIB_DEPS}\n" - "exe_LIB_DEPS=${exe_LIB_DEPS}\n" - "------------------------------------------\n") - endif() - - if(NOT (exe_NAME AND exe_SOURCES)) - message(FATAL_ERROR "draco_add_executable: NAME and SOURCES required.") - endif() - - list(APPEND draco_targets ${exe_NAME}) - if(exe_TEST) - list(APPEND draco_test_targets ${exe_NAME}) - list(APPEND draco_test_sources ${exe_SOURCES}) - else() - list(APPEND draco_exe_targets ${exe_NAME}) - list(APPEND draco_sources ${exe_SOURCES}) - endif() - - add_executable(${exe_NAME} ${exe_SOURCES}) - set_target_properties(${exe_NAME} PROPERTIES VERSION ${DRACO_VERSION}) - - if(exe_OUTPUT_NAME) - set_target_properties(${exe_NAME} PROPERTIES OUTPUT_NAME ${exe_OUTPUT_NAME}) - endif() - - draco_process_intrinsics_sources(TARGET ${exe_NAME} SOURCES ${exe_SOURCES}) - - if(exe_DEFINES) - target_compile_definitions(${exe_NAME} PRIVATE ${exe_DEFINES}) - endif() - - if(exe_INCLUDES) - target_include_directories(${exe_NAME} PRIVATE ${exe_INCLUDES}) - endif() - - if(exe_COMPILE_FLAGS OR DRACO_CXX_FLAGS) - target_compile_options(${exe_NAME} - PRIVATE ${exe_COMPILE_FLAGS} ${DRACO_CXX_FLAGS}) - endif() - - if(exe_LINK_FLAGS OR DRACO_EXE_LINKER_FLAGS) - if(${CMAKE_VERSION} VERSION_LESS "3.13") - list(APPEND exe_LINK_FLAGS "${DRACO_EXE_LINKER_FLAGS}") - # LINK_FLAGS is managed as a string. - draco_set_and_stringify(SOURCE "${exe_LINK_FLAGS}" DEST exe_LINK_FLAGS) - set_target_properties(${exe_NAME} - PROPERTIES LINK_FLAGS "${exe_LINK_FLAGS}") - else() - target_link_options(${exe_NAME} PRIVATE ${exe_LINK_FLAGS} - ${DRACO_EXE_LINKER_FLAGS}) - endif() - endif() - - if(exe_OBJLIB_DEPS) - foreach(objlib_dep ${exe_OBJLIB_DEPS}) - target_sources(${exe_NAME} PRIVATE $) - endforeach() - endif() - - if(CMAKE_THREAD_LIBS_INIT) - list(APPEND exe_LIB_DEPS ${CMAKE_THREAD_LIBS_INIT}) - endif() - - if(BUILD_SHARED_LIBS AND (MSVC OR WIN32)) - target_compile_definitions(${exe_NAME} PRIVATE "DRACO_BUILDING_DLL=0") - endif() - - if(exe_LIB_DEPS) - unset(exe_static) - if("${CMAKE_EXE_LINKER_FLAGS} ${DRACO_EXE_LINKER_FLAGS}" MATCHES "static") - set(exe_static ON) - endif() - - if(exe_static AND CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") - # Third party dependencies can introduce dependencies on system and test - # libraries. Since the target created here is an executable, and CMake - # does not provide a method of controlling order of link dependencies, - # wrap all of the dependencies of this target in start/end group flags to - # ensure that dependencies of third party targets can be resolved when - # those dependencies happen to be resolved by dependencies of the current - # target. - list(INSERT exe_LIB_DEPS 0 -Wl,--start-group) - list(APPEND exe_LIB_DEPS -Wl,--end-group) - endif() - target_link_libraries(${exe_NAME} PRIVATE ${exe_LIB_DEPS}) - endif() -endmacro() - -# Creates a library target of the specified type. The target name is passed as a -# parameter to the NAME argument, the type as a parameter to the TYPE argument, -# and the sources passed as a parameter to the SOURCES argument: -# draco_add_library(NAME TYPE SOURCES [optional args]) -# -# Optional args: -# cmake-format: off -# - OUTPUT_NAME: Override output file basename. Target basename defaults to -# NAME. OUTPUT_NAME is ignored when BUILD_SHARED_LIBS is enabled and CMake -# is generating a build for which MSVC is true. This is to avoid output -# basename collisions with DLL import libraries. -# - TEST: Flag. Presence means treat library as a test. -# - DEFINES: List of preprocessor macro definitions. -# - INCLUDES: list of include directories for the target. -# - COMPILE_FLAGS: list of compiler flags for the target. -# - LINK_FLAGS: List of linker flags for the target. -# - OBJLIB_DEPS: List of CMake object library target dependencies. -# - LIB_DEPS: List of CMake library dependencies. -# - PUBLIC_INCLUDES: List of include paths to export to dependents. -# cmake-format: on -# -# Sources passed to the macro are added to the lists tracking draco sources: -# cmake-format: off -# - When TEST is specified sources are added to $draco_test_sources. -# - Otherwise sources are added to $draco_sources. -# cmake-format: on -# -# Targets passed to this macro are added to the lists tracking draco targets: -# cmake-format: off -# - Targets are always added to $draco_targets. -# - When the TEST flag is specified, targets are added to -# $draco_test_targets. -# - When TEST is not specified: -# - Libraries of type SHARED are added to $draco_dylib_targets. -# - Libraries of type OBJECT are added to $draco_objlib_targets. -# - Libraries of type STATIC are added to $draco_lib_targets. -# cmake-format: on -macro(draco_add_library) - unset(lib_TEST) - unset(lib_NAME) - unset(lib_OUTPUT_NAME) - unset(lib_TYPE) - unset(lib_SOURCES) - unset(lib_DEFINES) - unset(lib_INCLUDES) - unset(lib_COMPILE_FLAGS) - unset(lib_LINK_FLAGS) - unset(lib_OBJLIB_DEPS) - unset(lib_LIB_DEPS) - unset(lib_PUBLIC_INCLUDES) - unset(lib_TARGET_PROPERTIES) - set(optional_args TEST) - set(single_value_args NAME OUTPUT_NAME TYPE) - set(multi_value_args SOURCES DEFINES INCLUDES COMPILE_FLAGS LINK_FLAGS - OBJLIB_DEPS LIB_DEPS PUBLIC_INCLUDES TARGET_PROPERTIES) - - cmake_parse_arguments(lib "${optional_args}" "${single_value_args}" - "${multi_value_args}" ${ARGN}) - - if(DRACO_VERBOSE GREATER 1) - message("--------- draco_add_library ---------\n" - "lib_TEST=${lib_TEST}\n" - "lib_NAME=${lib_NAME}\n" - "lib_OUTPUT_NAME=${lib_OUTPUT_NAME}\n" - "lib_TYPE=${lib_TYPE}\n" - "lib_SOURCES=${lib_SOURCES}\n" - "lib_DEFINES=${lib_DEFINES}\n" - "lib_INCLUDES=${lib_INCLUDES}\n" - "lib_COMPILE_FLAGS=${lib_COMPILE_FLAGS}\n" - "lib_LINK_FLAGS=${lib_LINK_FLAGS}\n" - "lib_OBJLIB_DEPS=${lib_OBJLIB_DEPS}\n" - "lib_LIB_DEPS=${lib_LIB_DEPS}\n" - "lib_PUBLIC_INCLUDES=${lib_PUBLIC_INCLUDES}\n" - "---------------------------------------\n") - endif() - - if(NOT (lib_NAME AND lib_TYPE)) - message(FATAL_ERROR "draco_add_library: NAME and TYPE required.") - endif() - - list(APPEND draco_targets ${lib_NAME}) - if(lib_TEST) - list(APPEND draco_test_targets ${lib_NAME}) - list(APPEND draco_test_sources ${lib_SOURCES}) - else() - list(APPEND draco_sources ${lib_SOURCES}) - if(lib_TYPE STREQUAL MODULE) - list(APPEND draco_module_targets ${lib_NAME}) - elseif(lib_TYPE STREQUAL OBJECT) - list(APPEND draco_objlib_targets ${lib_NAME}) - elseif(lib_TYPE STREQUAL SHARED) - list(APPEND draco_dylib_targets ${lib_NAME}) - elseif(lib_TYPE STREQUAL STATIC) - list(APPEND draco_lib_targets ${lib_NAME}) - else() - message(WARNING "draco_add_library: Unhandled type: ${lib_TYPE}") - endif() - endif() - - add_library(${lib_NAME} ${lib_TYPE} ${lib_SOURCES}) - if(lib_SOURCES) - draco_process_intrinsics_sources(TARGET ${lib_NAME} SOURCES ${lib_SOURCES}) - endif() - - if(lib_OUTPUT_NAME) - if(NOT (BUILD_SHARED_LIBS AND MSVC)) - set_target_properties(${lib_NAME} - PROPERTIES OUTPUT_NAME ${lib_OUTPUT_NAME}) - endif() - endif() - - if(lib_DEFINES) - target_compile_definitions(${lib_NAME} PRIVATE ${lib_DEFINES}) - endif() - - if(lib_INCLUDES) - target_include_directories(${lib_NAME} PRIVATE ${lib_INCLUDES}) - endif() - - if(lib_PUBLIC_INCLUDES) - target_include_directories(${lib_NAME} PUBLIC ${lib_PUBLIC_INCLUDES}) - endif() - - if(lib_COMPILE_FLAGS OR DRACO_CXX_FLAGS) - target_compile_options(${lib_NAME} - PRIVATE ${lib_COMPILE_FLAGS} ${DRACO_CXX_FLAGS}) - endif() - - if(lib_LINK_FLAGS) - set_target_properties(${lib_NAME} PROPERTIES LINK_FLAGS ${lib_LINK_FLAGS}) - endif() - - if(lib_OBJLIB_DEPS) - foreach(objlib_dep ${lib_OBJLIB_DEPS}) - target_sources(${lib_NAME} PRIVATE $) - endforeach() - endif() - - if(lib_LIB_DEPS) - if(lib_TYPE STREQUAL STATIC) - set(link_type PUBLIC) - else() - set(link_type PRIVATE) - if(lib_TYPE STREQUAL SHARED AND CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") - # The draco shared object uses the static draco as input to turn it into - # a shared object. Include everything from the static library in the - # shared object. - if(APPLE) - list(INSERT lib_LIB_DEPS 0 -Wl,-force_load) - else() - list(INSERT lib_LIB_DEPS 0 -Wl,--whole-archive) - list(APPEND lib_LIB_DEPS -Wl,--no-whole-archive) - endif() - endif() - endif() - target_link_libraries(${lib_NAME} ${link_type} ${lib_LIB_DEPS}) - endif() - - if(NOT MSVC AND lib_NAME MATCHES "^lib") - # Non-MSVC generators prepend lib to static lib target file names. Libdraco - # already includes lib in its name. Avoid naming output files liblib*. - set_target_properties(${lib_NAME} PROPERTIES PREFIX "") - endif() - - # VERSION and SOVERSION as necessary - if(NOT lib_TYPE STREQUAL STATIC AND NOT lib_TYPE STREQUAL MODULE) - set_target_properties(${lib_NAME} PROPERTIES VERSION ${DRACO_VERSION}) - if(NOT MSVC) - set_target_properties(${lib_NAME} PROPERTIES SOVERSION ${DRACO_SOVERSION}) - endif() - endif() - - if(BUILD_SHARED_LIBS AND (MSVC OR WIN32)) - if(lib_TYPE STREQUAL SHARED) - target_compile_definitions(${lib_NAME} PRIVATE "DRACO_BUILDING_DLL=1") - else() - target_compile_definitions(${lib_NAME} PRIVATE "DRACO_BUILDING_DLL=0") - endif() - endif() - - # Determine if $lib_NAME is a header only target. - unset(sources_list) - if(lib_SOURCES) - set(sources_list ${lib_SOURCES}) - list(FILTER sources_list INCLUDE REGEX cc$) - endif() - - if(NOT sources_list) - if(NOT XCODE) - # This is a header only target. Tell CMake the link language. - set_target_properties(${lib_NAME} PROPERTIES LINKER_LANGUAGE CXX) - else() - # The Xcode generator ignores LINKER_LANGUAGE. Add a dummy cc file. - draco_create_dummy_source_file(TARGET ${lib_NAME} BASENAME ${lib_NAME}) - endif() - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_test_config.h.cmake b/libs/assimp/contrib/draco/cmake/draco_test_config.h.cmake deleted file mode 100644 index 77a5741..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_test_config.h.cmake +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef DRACO_TESTING_DRACO_TEST_CONFIG_H_ -#define DRACO_TESTING_DRACO_TEST_CONFIG_H_ - -// If this file is named draco_test_config.h.cmake: -// This file is used as input at cmake generation time. - -// If this file is named draco_test_config.h: -// GENERATED FILE, DO NOT EDIT. SEE ABOVE. - -#define DRACO_TEST_DATA_DIR "${DRACO_TEST_DATA_DIR}" -#define DRACO_TEST_TEMP_DIR "${DRACO_TEST_TEMP_DIR}" - -#endif // DRACO_TESTING_DRACO_TEST_CONFIG_H_ diff --git a/libs/assimp/contrib/draco/cmake/draco_tests.cmake b/libs/assimp/contrib/draco/cmake/draco_tests.cmake deleted file mode 100644 index a6dfc5b..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_tests.cmake +++ /dev/null @@ -1,133 +0,0 @@ -if(DRACO_CMAKE_DRACO_TESTS_CMAKE) - return() -endif() -set(DRACO_CMAKE_DRACO_TESTS_CMAKE 1) - -# The factory tests are in a separate target to avoid breaking tests that rely -# on file I/O via the factories. The fake reader and writer implementations -# interfere with normal file I/O function. -set(draco_factory_test_sources - "${draco_src_root}/io/file_reader_factory_test.cc" - "${draco_src_root}/io/file_writer_factory_test.cc") - -list( - APPEND - draco_test_sources - "${draco_src_root}/animation/keyframe_animation_encoding_test.cc" - "${draco_src_root}/animation/keyframe_animation_test.cc" - "${draco_src_root}/attributes/point_attribute_test.cc" - "${draco_src_root}/compression/attributes/point_d_vector_test.cc" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_test.cc" - "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc" - "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoding_test.cc" - "${draco_src_root}/compression/bit_coders/rans_coding_test.cc" - "${draco_src_root}/compression/decode_test.cc" - "${draco_src_root}/compression/encode_test.cc" - "${draco_src_root}/compression/entropy/shannon_entropy_test.cc" - "${draco_src_root}/compression/entropy/symbol_coding_test.cc" - "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoding_test.cc" - "${draco_src_root}/compression/mesh/mesh_encoder_test.cc" - "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoding_test.cc" - "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoding_test.cc" - "${draco_src_root}/core/buffer_bit_coding_test.cc" - "${draco_src_root}/core/draco_test_base.h" - "${draco_src_root}/core/draco_test_utils.cc" - "${draco_src_root}/core/draco_test_utils.h" - "${draco_src_root}/core/math_utils_test.cc" - "${draco_src_root}/core/quantization_utils_test.cc" - "${draco_src_root}/core/status_test.cc" - "${draco_src_root}/core/vector_d_test.cc" - "${draco_src_root}/io/file_reader_test_common.h" - "${draco_src_root}/io/file_utils_test.cc" - "${draco_src_root}/io/stdio_file_reader_test.cc" - "${draco_src_root}/io/stdio_file_writer_test.cc" - "${draco_src_root}/io/obj_decoder_test.cc" - "${draco_src_root}/io/obj_encoder_test.cc" - "${draco_src_root}/io/ply_decoder_test.cc" - "${draco_src_root}/io/ply_reader_test.cc" - "${draco_src_root}/io/point_cloud_io_test.cc" - "${draco_src_root}/mesh/mesh_are_equivalent_test.cc" - "${draco_src_root}/mesh/mesh_cleanup_test.cc" - "${draco_src_root}/mesh/triangle_soup_mesh_builder_test.cc" - "${draco_src_root}/metadata/metadata_encoder_test.cc" - "${draco_src_root}/metadata/metadata_test.cc" - "${draco_src_root}/point_cloud/point_cloud_builder_test.cc" - "${draco_src_root}/point_cloud/point_cloud_test.cc") - -list(APPEND draco_gtest_all - "${draco_root}/../googletest/googletest/src/gtest-all.cc") -list(APPEND draco_gtest_main - "${draco_root}/../googletest/googletest/src/gtest_main.cc") - -macro(draco_setup_test_targets) - if(DRACO_TESTS) - if(NOT (EXISTS ${draco_gtest_all} AND EXISTS ${draco_gtest_main})) - message(FATAL "googletest must be a sibling directory of ${draco_root}.") - endif() - - list(APPEND draco_test_defines GTEST_HAS_PTHREAD=0) - - draco_add_library(TEST - NAME - draco_gtest - TYPE - STATIC - SOURCES - ${draco_gtest_all} - DEFINES - ${draco_defines} - ${draco_test_defines} - INCLUDES - ${draco_test_include_paths}) - - draco_add_library(TEST - NAME - draco_gtest_main - TYPE - STATIC - SOURCES - ${draco_gtest_main} - DEFINES - ${draco_defines} - ${draco_test_defines} - INCLUDES - ${draco_test_include_paths}) - - set(DRACO_TEST_DATA_DIR "${draco_root}/testdata") - set(DRACO_TEST_TEMP_DIR "${draco_build}/draco_test_temp") - file(MAKE_DIRECTORY "${DRACO_TEST_TEMP_DIR}") - - # Sets DRACO_TEST_DATA_DIR and DRACO_TEST_TEMP_DIR. - configure_file("${draco_root}/cmake/draco_test_config.h.cmake" - "${draco_build}/testing/draco_test_config.h") - - # Create the test targets. - draco_add_executable(NAME - draco_tests - SOURCES - ${draco_test_sources} - DEFINES - ${draco_defines} - ${draco_test_defines} - INCLUDES - ${draco_test_include_paths} - LIB_DEPS - draco_static - draco_gtest - draco_gtest_main) - - draco_add_executable(NAME - draco_factory_tests - SOURCES - ${draco_factory_test_sources} - DEFINES - ${draco_defines} - ${draco_test_defines} - INCLUDES - ${draco_test_include_paths} - LIB_DEPS - draco_static - draco_gtest - draco_gtest_main) - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/draco_variables.cmake b/libs/assimp/contrib/draco/cmake/draco_variables.cmake deleted file mode 100644 index 8dbc77a..0000000 --- a/libs/assimp/contrib/draco/cmake/draco_variables.cmake +++ /dev/null @@ -1,64 +0,0 @@ -if(DRACO_CMAKE_DRACO_VARIABLES_CMAKE_) - return() -endif() # DRACO_CMAKE_DRACO_VARIABLES_CMAKE_ -set(DRACO_CMAKE_DRACO_VARIABLES_CMAKE_ 1) - -# Halts generation when $variable_name does not refer to a directory that -# exists. -macro(draco_variable_must_be_directory variable_name) - if("${variable_name}" STREQUAL "") - message( - FATAL_ERROR - "Empty variable_name passed to draco_variable_must_be_directory.") - endif() - - if("${${variable_name}}" STREQUAL "") - message( - FATAL_ERROR - "Empty variable ${variable_name} is required to build draco.") - endif() - - if(NOT IS_DIRECTORY "${${variable_name}}") - message( - FATAL_ERROR - "${variable_name}, which is ${${variable_name}}, does not refer to a\n" - "directory.") - endif() -endmacro() - -# Adds $var_name to the tracked variables list. -macro(draco_track_configuration_variable var_name) - if(DRACO_VERBOSE GREATER 2) - message("---- draco_track_configuration_variable ----\n" - "var_name=${var_name}\n" - "----------------------------------------------\n") - endif() - - list(APPEND draco_configuration_variables ${var_name}) - list(REMOVE_DUPLICATES draco_configuration_variables) -endmacro() - -# Logs current C++ and executable linker flags via the CMake message command. -macro(draco_dump_cmake_flag_variables) - unset(flag_variables) - list(APPEND flag_variables "CMAKE_CXX_FLAGS_INIT" "CMAKE_CXX_FLAGS" - "CMAKE_EXE_LINKER_FLAGS_INIT" "CMAKE_EXE_LINKER_FLAGS") - if(CMAKE_BUILD_TYPE) - list(APPEND flag_variables "CMAKE_BUILD_TYPE" - "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}_INIT" - "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" - "CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE}_INIT" - "CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE}") - endif() - foreach(flag_variable ${flag_variables}) - message("${flag_variable}:${${flag_variable}}") - endforeach() -endmacro() - -# Dumps the variables tracked in $draco_configuration_variables via the CMake -# message command. -macro(draco_dump_tracked_configuration_variables) - foreach(config_variable ${draco_configuration_variables}) - message("${config_variable}:${${config_variable}}") - endforeach() -endmacro() diff --git a/libs/assimp/contrib/draco/cmake/sanitizers.cmake b/libs/assimp/contrib/draco/cmake/sanitizers.cmake deleted file mode 100644 index e720bc0..0000000 --- a/libs/assimp/contrib/draco/cmake/sanitizers.cmake +++ /dev/null @@ -1,19 +0,0 @@ -if(DRACO_CMAKE_SANITIZERS_CMAKE_) - return() -endif() -set(DRACO_CMAKE_SANITIZERS_CMAKE_ 1) - -if(MSVC OR NOT SANITIZE) - return() -endif() - -include("${draco_root}/cmake/compiler_flags.cmake") - -string(TOLOWER ${SANITIZE} SANITIZE) - -# Require the sanitizer requested. -require_linker_flag("-fsanitize=${SANITIZE}") -require_compiler_flag("-fsanitize=${SANITIZE}" YES) - -# Make callstacks accurate. -require_compiler_flag("-fno-omit-frame-pointer -fno-optimize-sibling-calls" YES) diff --git a/libs/assimp/contrib/draco/cmake/toolchains/aarch64-linux-gnu.cmake b/libs/assimp/contrib/draco/cmake/toolchains/aarch64-linux-gnu.cmake deleted file mode 100644 index 87e0b4a..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/aarch64-linux-gnu.cmake +++ /dev/null @@ -1,14 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_AARCH64_LINUX_GNU_CMAKE_) - return() -endif() # DRACO_CMAKE_TOOLCHAINS_AARCH64_LINUX_GNU_CMAKE_ -set(DRACO_CMAKE_TOOLCHAINS_AARCH64_LINUX_GNU_CMAKE_ 1) - -set(CMAKE_SYSTEM_NAME "Linux") - -if("${CROSS}" STREQUAL "") - set(CROSS aarch64-linux-gnu-) -endif() - -set(CMAKE_CXX_COMPILER ${CROSS}g++) -set(CMAKE_CXX_FLAGS_INIT "-march=armv8-a") -set(CMAKE_SYSTEM_PROCESSOR "aarch64") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/android-ndk-common.cmake b/libs/assimp/contrib/draco/cmake/toolchains/android-ndk-common.cmake deleted file mode 100644 index 5126d6e..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/android-ndk-common.cmake +++ /dev/null @@ -1,23 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ANDROID_NDK_COMMON_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_ANDROID_NDK_COMMON_CMAKE_ 1) - -# Toolchain files do not have access to cached variables: -# https://gitlab.kitware.com/cmake/cmake/issues/16170. Set an intermediate -# environment variable when loaded the first time. -if(DRACO_ANDROID_NDK_PATH) - set(ENV{DRACO_ANDROID_NDK_PATH} "${DRACO_ANDROID_NDK_PATH}") -else() - set(DRACO_ANDROID_NDK_PATH "$ENV{DRACO_ANDROID_NDK_PATH}") -endif() - -set(CMAKE_SYSTEM_NAME Android) - -if(NOT CMAKE_ANDROID_STL_TYPE) - set(CMAKE_ANDROID_STL_TYPE c++_static) -endif() - -if(NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION) - set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang) -endif() diff --git a/libs/assimp/contrib/draco/cmake/toolchains/android.cmake b/libs/assimp/contrib/draco/cmake/toolchains/android.cmake deleted file mode 100644 index b8f576d..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/android.cmake +++ /dev/null @@ -1,39 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ANDROID_CMAKE_) - return() -endif() # DRACO_CMAKE_TOOLCHAINS_ANDROID_CMAKE_ - -# Additional ANDROID_* settings are available, see: -# https://developer.android.com/ndk/guides/cmake#variables - -if(NOT ANDROID_PLATFORM) - set(ANDROID_PLATFORM android-21) -endif() - -# Choose target architecture with: -# -# -DANDROID_ABI={armeabi-v7a,armeabi-v7a with NEON,arm64-v8a,x86,x86_64} -if(NOT ANDROID_ABI) - set(ANDROID_ABI arm64-v8a) -endif() - -# Force arm mode for 32-bit targets (instead of the default thumb) to improve -# performance. -if(NOT ANDROID_ARM_MODE) - set(ANDROID_ARM_MODE arm) -endif() - -# Toolchain files do not have access to cached variables: -# https://gitlab.kitware.com/cmake/cmake/issues/16170. Set an intermediate -# environment variable when loaded the first time. -if(DRACO_ANDROID_NDK_PATH) - set(ENV{DRACO_ANDROID_NDK_PATH} "${DRACO_ANDROID_NDK_PATH}") -else() - set(DRACO_ANDROID_NDK_PATH "$ENV{DRACO_ANDROID_NDK_PATH}") -endif() - -if(NOT DRACO_ANDROID_NDK_PATH) - message(FATAL_ERROR "DRACO_ANDROID_NDK_PATH not set.") - return() -endif() - -include("${DRACO_ANDROID_NDK_PATH}/build/cmake/android.toolchain.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/arm-ios-common.cmake b/libs/assimp/contrib/draco/cmake/toolchains/arm-ios-common.cmake deleted file mode 100644 index 65326d1..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/arm-ios-common.cmake +++ /dev/null @@ -1,17 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARM_IOS_COMMON_CMAKE_) - return() -endif() -set(DRACO_CMAKE_ARM_IOS_COMMON_CMAKE_ 1) - -set(CMAKE_SYSTEM_NAME "Darwin") -if(CMAKE_OSX_SDK) - set(CMAKE_OSX_SYSROOT ${CMAKE_OSX_SDK}) -else() - set(CMAKE_OSX_SYSROOT iphoneos) -endif() -set(CMAKE_C_COMPILER clang) -set(CMAKE_C_COMPILER_ARG1 "-arch ${CMAKE_SYSTEM_PROCESSOR}") -set(CMAKE_CXX_COMPILER clang++) -set(CMAKE_CXX_COMPILER_ARG1 "-arch ${CMAKE_SYSTEM_PROCESSOR}") - -# TODO(tomfinegan): Handle bit code embedding. diff --git a/libs/assimp/contrib/draco/cmake/toolchains/arm-linux-gnueabihf.cmake b/libs/assimp/contrib/draco/cmake/toolchains/arm-linux-gnueabihf.cmake deleted file mode 100644 index 6e45969..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/arm-linux-gnueabihf.cmake +++ /dev/null @@ -1,15 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARM_LINUX_GNUEABIHF_CMAKE_) - return() -endif() # DRACO_CMAKE_TOOLCHAINS_ARM_LINUX_GNUEABIHF_CMAKE_ -set(DRACO_CMAKE_TOOLCHAINS_ARM_LINUX_GNUEABIHF_CMAKE_ 1) - -set(CMAKE_SYSTEM_NAME "Linux") - -if("${CROSS}" STREQUAL "") - set(CROSS arm-linux-gnueabihf-) -endif() - -set(CMAKE_CXX_COMPILER ${CROSS}g++) -set(CMAKE_CXX_FLAGS_INIT "-march=armv7-a -marm") -set(CMAKE_SYSTEM_PROCESSOR "armv7") -set(DRACO_NEON_INTRINSICS_FLAG "-mfpu=neon") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/arm64-android-ndk-libcpp.cmake b/libs/assimp/contrib/draco/cmake/toolchains/arm64-android-ndk-libcpp.cmake deleted file mode 100644 index 4b6d366..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/arm64-android-ndk-libcpp.cmake +++ /dev/null @@ -1,16 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARM64_ANDROID_NDK_LIBCPP_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_ARM64_ANDROID_NDK_LIBCPP_CMAKE_ 1) - -include("${CMAKE_CURRENT_LIST_DIR}/android-ndk-common.cmake") - -if(NOT ANDROID_PLATFORM) - set(ANROID_PLATFORM android-21) -endif() - -if(NOT ANDROID_ABI) - set(ANDROID_ABI arm64-v8a) -endif() - -include("${DRACO_ANDROID_NDK_PATH}/build/cmake/android.toolchain.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/arm64-ios.cmake b/libs/assimp/contrib/draco/cmake/toolchains/arm64-ios.cmake deleted file mode 100644 index c4ec7e3..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/arm64-ios.cmake +++ /dev/null @@ -1,14 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_ 1) - -if(XCODE) - # TODO(tomfinegan): Handle arm builds in Xcode. - message(FATAL_ERROR "This toolchain does not support Xcode.") -endif() - -set(CMAKE_SYSTEM_PROCESSOR "arm64") -set(CMAKE_OSX_ARCHITECTURES "arm64") - -include("${CMAKE_CURRENT_LIST_DIR}/arm-ios-common.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/arm64-linux-gcc.cmake b/libs/assimp/contrib/draco/cmake/toolchains/arm64-linux-gcc.cmake deleted file mode 100644 index 046ff01..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/arm64-linux-gcc.cmake +++ /dev/null @@ -1,18 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_ 1) - -set(CMAKE_SYSTEM_NAME "Linux") - -if("${CROSS}" STREQUAL "") - # Default the cross compiler prefix to something known to work. - set(CROSS aarch64-linux-gnu-) -endif() - -set(CMAKE_C_COMPILER ${CROSS}gcc) -set(CMAKE_CXX_COMPILER ${CROSS}g++) -set(AS_EXECUTABLE ${CROSS}as) -set(CMAKE_C_COMPILER_ARG1 "-march=armv8-a") -set(CMAKE_CXX_COMPILER_ARG1 "-march=armv8-a") -set(CMAKE_SYSTEM_PROCESSOR "arm64") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/armv7-android-ndk-libcpp.cmake b/libs/assimp/contrib/draco/cmake/toolchains/armv7-android-ndk-libcpp.cmake deleted file mode 100644 index 80ee98b..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/armv7-android-ndk-libcpp.cmake +++ /dev/null @@ -1,16 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARMV7_ANDROID_NDK_LIBCPP_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_ARMV7_ANDROID_NDK_LIBCPP_CMAKE_ 1) - -include("${CMAKE_CURRENT_LIST_DIR}/android-ndk-common.cmake") - -if(NOT ANDROID_PLATFORM) - set(ANDROID_PLATFORM android-18) -endif() - -if(NOT ANDROID_ABI) - set(ANDROID_ABI armeabi-v7a) -endif() - -include("${DRACO_ANDROID_NDK_PATH}/build/cmake/android.toolchain.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/armv7-ios.cmake b/libs/assimp/contrib/draco/cmake/toolchains/armv7-ios.cmake deleted file mode 100644 index 8ddd699..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/armv7-ios.cmake +++ /dev/null @@ -1,14 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARMV7_IOS_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_ARMV7_IOS_CMAKE_ 1) - -if(XCODE) - # TODO(tomfinegan): Handle arm builds in Xcode. - message(FATAL_ERROR "This toolchain does not support Xcode.") -endif() - -set(CMAKE_SYSTEM_PROCESSOR "armv7") -set(CMAKE_OSX_ARCHITECTURES "armv7") - -include("${CMAKE_CURRENT_LIST_DIR}/arm-ios-common.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/armv7-linux-gcc.cmake b/libs/assimp/contrib/draco/cmake/toolchains/armv7-linux-gcc.cmake deleted file mode 100644 index 9c94723..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/armv7-linux-gcc.cmake +++ /dev/null @@ -1,24 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_ 1) - -set(CMAKE_SYSTEM_NAME "Linux") - -if("${CROSS}" STREQUAL "") - # Default the cross compiler prefix to something known to work. - set(CROSS arm-linux-gnueabihf-) -endif() - -if(NOT ${CROSS} MATCHES hf-$) - set(DRACO_EXTRA_TOOLCHAIN_FLAGS "-mfloat-abi=softfp") -endif() - -set(CMAKE_C_COMPILER ${CROSS}gcc) -set(CMAKE_CXX_COMPILER ${CROSS}g++) -set(AS_EXECUTABLE ${CROSS}as) -set(CMAKE_C_COMPILER_ARG1 - "-march=armv7-a -mfpu=neon ${DRACO_EXTRA_TOOLCHAIN_FLAGS}") -set(CMAKE_CXX_COMPILER_ARG1 - "-march=armv7-a -mfpu=neon ${DRACO_EXTRA_TOOLCHAIN_FLAGS}") -set(CMAKE_SYSTEM_PROCESSOR "armv7") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/armv7s-ios.cmake b/libs/assimp/contrib/draco/cmake/toolchains/armv7s-ios.cmake deleted file mode 100644 index b433025..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/armv7s-ios.cmake +++ /dev/null @@ -1,14 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_ 1) - -if(XCODE) - # TODO(tomfinegan): Handle arm builds in Xcode. - message(FATAL_ERROR "This toolchain does not support Xcode.") -endif() - -set(CMAKE_SYSTEM_PROCESSOR "armv7s") -set(CMAKE_OSX_ARCHITECTURES "armv7s") - -include("${CMAKE_CURRENT_LIST_DIR}/arm-ios-common.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/i386-ios.cmake b/libs/assimp/contrib/draco/cmake/toolchains/i386-ios.cmake deleted file mode 100644 index e9a1055..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/i386-ios.cmake +++ /dev/null @@ -1,15 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_i386_IOS_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_i386_IOS_CMAKE_ 1) - -if(XCODE) - # TODO(tomfinegan): Handle arm builds in Xcode. - message(FATAL_ERROR "This toolchain does not support Xcode.") -endif() - -set(CMAKE_SYSTEM_PROCESSOR "i386") -set(CMAKE_OSX_ARCHITECTURES "i386") -set(CMAKE_OSX_SDK "iphonesimulator") - -include("${CMAKE_CURRENT_LIST_DIR}/arm-ios-common.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/x86-android-ndk-libcpp.cmake b/libs/assimp/contrib/draco/cmake/toolchains/x86-android-ndk-libcpp.cmake deleted file mode 100644 index d433836..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/x86-android-ndk-libcpp.cmake +++ /dev/null @@ -1,16 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_X86_ANDROID_NDK_LIBCPP_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_X86_ANDROID_NDK_LIBCPP_CMAKE_ 1) - -include("${CMAKE_CURRENT_LIST_DIR}/android-ndk-common.cmake") - -if(NOT ANDROID_PLATFORM) - set(ANDROID_PLATFORM android-18) -endif() - -if(NOT ANDROID_ABI) - set(ANDROID_ABI x86) -endif() - -include("${DRACO_ANDROID_NDK_PATH}/build/cmake/android.toolchain.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/x86_64-android-ndk-libcpp.cmake b/libs/assimp/contrib/draco/cmake/toolchains/x86_64-android-ndk-libcpp.cmake deleted file mode 100644 index d6fabea..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/x86_64-android-ndk-libcpp.cmake +++ /dev/null @@ -1,16 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_X86_64_ANDROID_NDK_LIBCPP_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_X86_64_ANDROID_NDK_LIBCPP_CMAKE_ 1) - -include("${CMAKE_CURRENT_LIST_DIR}/android-ndk-common.cmake") - -if(NOT ANDROID_PLATFORM) - set(ANDROID_PLATFORM android-21) -endif() - -if(NOT ANDROID_ABI) - set(ANDROID_ABI x86_64) -endif() - -include("${DRACO_ANDROID_NDK_PATH}/build/cmake/android.toolchain.cmake") diff --git a/libs/assimp/contrib/draco/cmake/toolchains/x86_64-ios.cmake b/libs/assimp/contrib/draco/cmake/toolchains/x86_64-ios.cmake deleted file mode 100644 index 4c50a72..0000000 --- a/libs/assimp/contrib/draco/cmake/toolchains/x86_64-ios.cmake +++ /dev/null @@ -1,15 +0,0 @@ -if(DRACO_CMAKE_TOOLCHAINS_X86_64_IOS_CMAKE_) - return() -endif() -set(DRACO_CMAKE_TOOLCHAINS_X86_64_IOS_CMAKE_ 1) - -if(XCODE) - # TODO(tomfinegan): Handle arm builds in Xcode. - message(FATAL_ERROR "This toolchain does not support Xcode.") -endif() - -set(CMAKE_SYSTEM_PROCESSOR "x86_64") -set(CMAKE_OSX_ARCHITECTURES "x86_64") -set(CMAKE_OSX_SDK "iphonesimulator") - -include("${CMAKE_CURRENT_LIST_DIR}/arm-ios-common.cmake") diff --git a/libs/assimp/contrib/draco/cmake/util.cmake b/libs/assimp/contrib/draco/cmake/util.cmake deleted file mode 100644 index 813146a..0000000 --- a/libs/assimp/contrib/draco/cmake/util.cmake +++ /dev/null @@ -1,79 +0,0 @@ -if(DRACO_CMAKE_UTIL_CMAKE_) - return() -endif() -set(DRACO_CMAKE_UTIL_CMAKE_ 1) - -# Creates dummy source file in $draco_build_dir named $basename.$extension and -# returns the full path to the dummy source file via the $out_file_path -# parameter. -function(create_dummy_source_file basename extension out_file_path) - set(dummy_source_file "${draco_build_dir}/${basename}.${extension}") - file(WRITE "${dummy_source_file}.new" - "// Generated file. DO NOT EDIT!\n" - "// ${target_name} needs a ${extension} file to force link language, \n" - "// or to silence a harmless CMake warning: Ignore me.\n" - "void ${target_name}_dummy_function(void) {}\n") - - # Will replace ${dummy_source_file} only if the file content has changed. - # This prevents forced Draco rebuilds after CMake runs. - configure_file("${dummy_source_file}.new" "${dummy_source_file}") - file(REMOVE "${dummy_source_file}.new") - - set(${out_file_path} ${dummy_source_file} PARENT_SCOPE) -endfunction() - -# Convenience function for adding a dummy source file to $target_name using -# $extension as the file extension. Wraps create_dummy_source_file(). -function(add_dummy_source_file_to_target target_name extension) - create_dummy_source_file("${target_name}" "${extension}" "dummy_source_file") - target_sources(${target_name} PRIVATE ${dummy_source_file}) -endfunction() - -# Extracts the version number from $version_file and returns it to the user via -# $version_string_out_var. This is achieved by finding the first instance of the -# kDracoVersion variable and then removing everything but the string literal -# assigned to the variable. Quotes and semicolon are stripped from the returned -# string. -function(extract_version_string version_file version_string_out_var) - file(STRINGS "${version_file}" draco_version REGEX "kDracoVersion") - list(GET draco_version 0 draco_version) - string(REPLACE "static const char kDracoVersion[] = " "" draco_version - "${draco_version}") - string(REPLACE ";" "" draco_version "${draco_version}") - string(REPLACE "\"" "" draco_version "${draco_version}") - set("${version_string_out_var}" "${draco_version}" PARENT_SCOPE) -endfunction() - -# Sets CMake compiler launcher to $launcher_name when $launcher_name is found in -# $PATH. Warns user about ignoring build flag $launcher_flag when $launcher_name -# is not found in $PATH. -function(set_compiler_launcher launcher_flag launcher_name) - find_program(launcher_path "${launcher_name}") - if(launcher_path) - set(CMAKE_C_COMPILER_LAUNCHER "${launcher_path}" PARENT_SCOPE) - set(CMAKE_CXX_COMPILER_LAUNCHER "${launcher_path}" PARENT_SCOPE) - message("--- Using ${launcher_name} as compiler launcher.") - else() - message( - WARNING "--- Cannot find ${launcher_name}, ${launcher_flag} ignored.") - endif() -endfunction() - -# Terminates CMake execution when $var_name is unset in the environment. Sets -# CMake variable to the value of the environment variable when the variable is -# present in the environment. -macro(require_variable var_name) - if("$ENV{${var_name}}" STREQUAL "") - message(FATAL_ERROR "${var_name} must be set in environment.") - endif() - set_variable_if_unset(${var_name} "") -endmacro() - -# Sets $var_name to $default_value if not already set. -macro(set_variable_if_unset var_name default_value) - if(NOT "$ENV{${var_name}}" STREQUAL "") - set(${var_name} $ENV{${var_name}}) - elseif(NOT ${var_name}) - set(${var_name} ${default_value}) - endif() -endmacro() diff --git a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation.cc b/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation.cc deleted file mode 100644 index eaf94a3..0000000 --- a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation.cc +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/animation/keyframe_animation.h" - -namespace draco { - -KeyframeAnimation::KeyframeAnimation() {} - -bool KeyframeAnimation::SetTimestamps( - const std::vector ×tamp) { - // Already added attributes. - const int32_t num_frames = timestamp.size(); - if (num_attributes() > 0) { - // Timestamp attribute could be added only once. - if (timestamps()->size()) { - return false; - } else { - // Check if the number of frames is consistent with - // the existing keyframes. - if (num_frames != num_points()) { - return false; - } - } - } else { - // This is the first attribute. - set_num_frames(num_frames); - } - - // Add attribute for time stamp data. - std::unique_ptr timestamp_att = - std::unique_ptr(new PointAttribute()); - timestamp_att->Init(GeometryAttribute::GENERIC, 1, DT_FLOAT32, false, - num_frames); - for (PointIndex i(0); i < num_frames; ++i) { - timestamp_att->SetAttributeValue(timestamp_att->mapped_index(i), - ×tamp[i.value()]); - } - this->SetAttribute(kTimestampId, std::move(timestamp_att)); - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation.h b/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation.h deleted file mode 100644 index a7afb2b..0000000 --- a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation.h +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ANIMATION_KEYFRAME_ANIMATION_H_ -#define DRACO_ANIMATION_KEYFRAME_ANIMATION_H_ - -#include - -#include "draco/point_cloud/point_cloud.h" - -namespace draco { - -// Class for holding keyframe animation data. It will have two or more -// attributes as a point cloud. The first attribute is always the timestamp -// of the animation. Each KeyframeAnimation could have multiple animations with -// the same number of frames. Each animation will be treated as a point -// attribute. -class KeyframeAnimation : public PointCloud { - public: - // Force time stamp to be float type. - using TimestampType = float; - - KeyframeAnimation(); - - // Animation must have only one timestamp attribute. - // This function must be called before adding any animation data. - // Returns false if timestamp already exists. - bool SetTimestamps(const std::vector ×tamp); - - // Returns an id for the added animation data. This id will be used to - // identify this animation. - // Returns -1 if error, e.g. number of frames is not consistent. - // Type |T| should be consistent with |DataType|, e.g: - // float - DT_FLOAT32, - // int32_t - DT_INT32, ... - template - int32_t AddKeyframes(DataType data_type, uint32_t num_components, - const std::vector &data); - - const PointAttribute *timestamps() const { - return GetAttributeByUniqueId(kTimestampId); - } - const PointAttribute *keyframes(int32_t animation_id) const { - return GetAttributeByUniqueId(animation_id); - } - - // Number of frames should be equal to number points in the point cloud. - void set_num_frames(int32_t num_frames) { set_num_points(num_frames); } - int32_t num_frames() const { return static_cast(num_points()); } - - int32_t num_animations() const { return num_attributes() - 1; } - - private: - // Attribute id of timestamp is fixed to 0. - static constexpr int32_t kTimestampId = 0; -}; - -template -int32_t KeyframeAnimation::AddKeyframes(DataType data_type, - uint32_t num_components, - const std::vector &data) { - // TODO(draco-eng): Verify T is consistent with |data_type|. - if (num_components == 0) { - return -1; - } - // If timestamps is not added yet, then reserve attribute 0 for timestamps. - if (!num_attributes()) { - // Add a temporary attribute with 0 points to fill attribute id 0. - std::unique_ptr temp_att = - std::unique_ptr(new PointAttribute()); - temp_att->Init(GeometryAttribute::GENERIC, num_components, data_type, false, - 0); - this->AddAttribute(std::move(temp_att)); - - set_num_frames(data.size() / num_components); - } - - if (data.size() != num_components * num_frames()) { - return -1; - } - - std::unique_ptr keyframe_att = - std::unique_ptr(new PointAttribute()); - keyframe_att->Init(GeometryAttribute::GENERIC, num_components, data_type, - false, num_frames()); - const size_t stride = num_components; - for (PointIndex i(0); i < num_frames(); ++i) { - keyframe_att->SetAttributeValue(keyframe_att->mapped_index(i), - &data[i.value() * stride]); - } - return this->AddAttribute(std::move(keyframe_att)); -} - -} // namespace draco - -#endif // DRACO_ANIMATION_KEYFRAME_ANIMATION_H_ diff --git a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_decoder.cc b/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_decoder.cc deleted file mode 100644 index 2065946..0000000 --- a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_decoder.cc +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/animation/keyframe_animation_decoder.h" - -namespace draco { - -Status KeyframeAnimationDecoder::Decode(const DecoderOptions &options, - DecoderBuffer *in_buffer, - KeyframeAnimation *animation) { - const auto status = PointCloudSequentialDecoder::Decode( - options, in_buffer, static_cast(animation)); - if (!status.ok()) { - return status; - } - return OkStatus(); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_decoder.h b/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_decoder.h deleted file mode 100644 index fdf086b..0000000 --- a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_decoder.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ANIMATION_KEYFRAME_ANIMATION_DECODER_H_ -#define DRACO_ANIMATION_KEYFRAME_ANIMATION_DECODER_H_ - -#include "draco/animation/keyframe_animation.h" -#include "draco/compression/point_cloud/point_cloud_sequential_decoder.h" - -namespace draco { - -// Class for decoding keyframe animation. -class KeyframeAnimationDecoder : private PointCloudSequentialDecoder { - public: - KeyframeAnimationDecoder(){}; - - Status Decode(const DecoderOptions &options, DecoderBuffer *in_buffer, - KeyframeAnimation *animation); -}; - -} // namespace draco - -#endif // DRACO_ANIMATION_KEYFRAME_ANIMATION_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoder.cc b/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoder.cc deleted file mode 100644 index f7d84f3..0000000 --- a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoder.cc +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/animation/keyframe_animation_encoder.h" - -namespace draco { - -KeyframeAnimationEncoder::KeyframeAnimationEncoder() {} - -Status KeyframeAnimationEncoder::EncodeKeyframeAnimation( - const KeyframeAnimation &animation, const EncoderOptions &options, - EncoderBuffer *out_buffer) { - SetPointCloud(animation); - return Encode(options, out_buffer); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoder.h b/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoder.h deleted file mode 100644 index 6096c79..0000000 --- a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoder.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ANIMATION_KEYFRAME_ANIMATION_ENCODER_H_ -#define DRACO_ANIMATION_KEYFRAME_ANIMATION_ENCODER_H_ - -#include "draco/animation/keyframe_animation.h" -#include "draco/compression/point_cloud/point_cloud_sequential_encoder.h" - -namespace draco { - -// Class for encoding keyframe animation. It takes KeyframeAnimation as a -// PointCloud and compress it. It's mostly a wrapper around PointCloudEncoder so -// that the animation module could be separated from geometry compression when -// exposed to developers. -class KeyframeAnimationEncoder : private PointCloudSequentialEncoder { - public: - KeyframeAnimationEncoder(); - - // Encode an animation to a buffer. - Status EncodeKeyframeAnimation(const KeyframeAnimation &animation, - const EncoderOptions &options, - EncoderBuffer *out_buffer); -}; - -} // namespace draco - -#endif // DRACO_ANIMATION_KEYFRAME_ANIMATION_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoding_test.cc b/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoding_test.cc deleted file mode 100644 index 4a6491f..0000000 --- a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_encoding_test.cc +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/animation/keyframe_animation.h" -#include "draco/animation/keyframe_animation_decoder.h" -#include "draco/animation/keyframe_animation_encoder.h" -#include "draco/core/draco_test_base.h" -#include "draco/core/draco_test_utils.h" - -namespace draco { - -class KeyframeAnimationEncodingTest : public ::testing::Test { - protected: - KeyframeAnimationEncodingTest() {} - - bool CreateAndAddTimestamps(int32_t num_frames) { - timestamps_.resize(num_frames); - for (int i = 0; i < timestamps_.size(); ++i) - timestamps_[i] = static_cast(i); - return keyframe_animation_.SetTimestamps(timestamps_); - } - - int32_t CreateAndAddAnimationData(int32_t num_frames, - uint32_t num_components) { - // Create and add animation data with. - animation_data_.resize(num_frames * num_components); - for (int i = 0; i < animation_data_.size(); ++i) - animation_data_[i] = static_cast(i); - return keyframe_animation_.AddKeyframes(draco::DT_FLOAT32, num_components, - animation_data_); - } - - template - void CompareAnimationData(const KeyframeAnimation &animation0, - const KeyframeAnimation &animation1, - bool quantized) { - ASSERT_EQ(animation0.num_frames(), animation1.num_frames()); - ASSERT_EQ(animation0.num_animations(), animation1.num_animations()); - - if (quantized) { - // TODO(hemmer) : Add test for stable quantization. - // Quantization will result in slightly different values. - // Skip comparing values. - return; - } - - // Compare time stamp. - const auto timestamp_att0 = animation0.timestamps(); - const auto timestamp_att1 = animation0.timestamps(); - for (int i = 0; i < animation0.num_frames(); ++i) { - std::array att_value0; - std::array att_value1; - ASSERT_TRUE((timestamp_att0->GetValue( - draco::AttributeValueIndex(i), &att_value0))); - ASSERT_TRUE((timestamp_att1->GetValue( - draco::AttributeValueIndex(i), &att_value1))); - ASSERT_FLOAT_EQ(att_value0[0], att_value1[0]); - } - - for (int animation_id = 1; animation_id < animation0.num_animations(); - ++animation_id) { - // Compare keyframe data. - const auto keyframe_att0 = animation0.keyframes(animation_id); - const auto keyframe_att1 = animation1.keyframes(animation_id); - ASSERT_EQ(keyframe_att0->num_components(), - keyframe_att1->num_components()); - for (int i = 0; i < animation0.num_frames(); ++i) { - std::array att_value0; - std::array att_value1; - ASSERT_TRUE((keyframe_att0->GetValue( - draco::AttributeValueIndex(i), &att_value0))); - ASSERT_TRUE((keyframe_att1->GetValue( - draco::AttributeValueIndex(i), &att_value1))); - for (int j = 0; j < att_value0.size(); ++j) { - ASSERT_FLOAT_EQ(att_value0[j], att_value1[j]); - } - } - } - } - - template - void TestKeyframeAnimationEncoding() { - TestKeyframeAnimationEncoding(false); - } - - template - void TestKeyframeAnimationEncoding(bool quantized) { - // Encode animation class. - draco::EncoderBuffer buffer; - draco::KeyframeAnimationEncoder encoder; - EncoderOptions options = EncoderOptions::CreateDefaultOptions(); - if (quantized) { - // Set quantization for timestamps. - options.SetAttributeInt(0, "quantization_bits", 20); - // Set quantization for keyframes. - for (int i = 1; i <= keyframe_animation_.num_animations(); ++i) { - options.SetAttributeInt(i, "quantization_bits", 20); - } - } - - ASSERT_TRUE( - encoder.EncodeKeyframeAnimation(keyframe_animation_, options, &buffer) - .ok()); - - draco::DecoderBuffer dec_decoder; - draco::KeyframeAnimationDecoder decoder; - DecoderBuffer dec_buffer; - dec_buffer.Init(buffer.data(), buffer.size()); - - // Decode animation class. - std::unique_ptr decoded_animation( - new KeyframeAnimation()); - DecoderOptions dec_options; - ASSERT_TRUE( - decoder.Decode(dec_options, &dec_buffer, decoded_animation.get()).ok()); - - // Verify if animation before and after compression is identical. - CompareAnimationData(keyframe_animation_, - *decoded_animation, quantized); - } - - draco::KeyframeAnimation keyframe_animation_; - std::vector timestamps_; - std::vector animation_data_; -}; - -TEST_F(KeyframeAnimationEncodingTest, OneComponent) { - const int num_frames = 1; - ASSERT_TRUE(CreateAndAddTimestamps(num_frames)); - ASSERT_EQ(CreateAndAddAnimationData(num_frames, 1), 1); - TestKeyframeAnimationEncoding<1>(); -} - -TEST_F(KeyframeAnimationEncodingTest, ManyComponents) { - const int num_frames = 100; - ASSERT_TRUE(CreateAndAddTimestamps(num_frames)); - ASSERT_EQ(CreateAndAddAnimationData(num_frames, 100), 1); - TestKeyframeAnimationEncoding<100>(); -} - -TEST_F(KeyframeAnimationEncodingTest, ManyComponentsWithQuantization) { - const int num_frames = 100; - ASSERT_TRUE(CreateAndAddTimestamps(num_frames)); - ASSERT_EQ(CreateAndAddAnimationData(num_frames, 4), 1); - // Test compression with quantization. - TestKeyframeAnimationEncoding<4>(true); -} - -TEST_F(KeyframeAnimationEncodingTest, MultipleAnimations) { - const int num_frames = 5; - ASSERT_TRUE(CreateAndAddTimestamps(num_frames)); - ASSERT_EQ(CreateAndAddAnimationData(num_frames, 3), 1); - ASSERT_EQ(CreateAndAddAnimationData(num_frames, 3), 2); - TestKeyframeAnimationEncoding<3>(); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_test.cc b/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_test.cc deleted file mode 100644 index bc92b25..0000000 --- a/libs/assimp/contrib/draco/src/draco/animation/keyframe_animation_test.cc +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/animation/keyframe_animation.h" - -#include "draco/core/draco_test_base.h" - -namespace { - -class KeyframeAnimationTest : public ::testing::Test { - protected: - KeyframeAnimationTest() {} - - bool CreateAndAddTimestamps(int32_t num_frames) { - timestamps_.resize(num_frames); - for (int i = 0; i < timestamps_.size(); ++i) - timestamps_[i] = static_cast(i); - return keyframe_animation_.SetTimestamps(timestamps_); - } - - int32_t CreateAndAddAnimationData(int32_t num_frames, - uint32_t num_components) { - // Create and add animation data with. - animation_data_.resize(num_frames * num_components); - for (int i = 0; i < animation_data_.size(); ++i) - animation_data_[i] = static_cast(i); - return keyframe_animation_.AddKeyframes(draco::DT_FLOAT32, num_components, - animation_data_); - } - - template - void CompareAnimationData() { - // Compare time stamp. - const auto timestamp_att = keyframe_animation_.timestamps(); - for (int i = 0; i < timestamps_.size(); ++i) { - std::array att_value; - ASSERT_TRUE((timestamp_att->GetValue( - draco::AttributeValueIndex(i), &att_value))); - ASSERT_FLOAT_EQ(att_value[0], i); - } - - // Compare keyframe data. - const auto keyframe_att = keyframe_animation_.keyframes(1); - for (int i = 0; i < animation_data_.size() / num_components_t; ++i) { - std::array att_value; - ASSERT_TRUE((keyframe_att->GetValue( - draco::AttributeValueIndex(i), &att_value))); - for (int j = 0; j < num_components_t; ++j) { - ASSERT_FLOAT_EQ(att_value[j], i * num_components_t + j); - } - } - } - - template - void TestKeyframeAnimation(int32_t num_frames) { - ASSERT_TRUE(CreateAndAddTimestamps(num_frames)); - ASSERT_EQ(CreateAndAddAnimationData(num_frames, num_components_t), 1); - CompareAnimationData(); - } - - draco::KeyframeAnimation keyframe_animation_; - std::vector timestamps_; - std::vector animation_data_; -}; - -// Test animation with 1 component and 10 frames. -TEST_F(KeyframeAnimationTest, OneComponent) { TestKeyframeAnimation<1>(10); } - -// Test animation with 4 component and 10 frames. -TEST_F(KeyframeAnimationTest, FourComponent) { TestKeyframeAnimation<4>(10); } - -// Test adding animation data before timestamp. -TEST_F(KeyframeAnimationTest, AddingAnimationFirst) { - ASSERT_EQ(CreateAndAddAnimationData(5, 1), 1); - ASSERT_TRUE(CreateAndAddTimestamps(5)); -} - -// Test adding timestamp more than once. -TEST_F(KeyframeAnimationTest, ErrorAddingTimestampsTwice) { - ASSERT_TRUE(CreateAndAddTimestamps(5)); - ASSERT_FALSE(CreateAndAddTimestamps(5)); -} -// Test animation with multiple animation data. -TEST_F(KeyframeAnimationTest, MultipleAnimationData) { - const int num_frames = 5; - ASSERT_TRUE(CreateAndAddTimestamps(num_frames)); - ASSERT_EQ(CreateAndAddAnimationData(num_frames, 1), 1); - ASSERT_EQ(CreateAndAddAnimationData(num_frames, 2), 2); -} - -} // namespace diff --git a/libs/assimp/contrib/draco/src/draco/attributes/attribute_octahedron_transform.cc b/libs/assimp/contrib/draco/src/draco/attributes/attribute_octahedron_transform.cc deleted file mode 100644 index 51c3bb6..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/attribute_octahedron_transform.cc +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#include "draco/attributes/attribute_octahedron_transform.h" - -#include "draco/attributes/attribute_transform_type.h" -#include "draco/compression/attributes/normal_compression_utils.h" - -namespace draco { - -bool AttributeOctahedronTransform::InitFromAttribute( - const PointAttribute &attribute) { - const AttributeTransformData *const transform_data = - attribute.GetAttributeTransformData(); - if (!transform_data || - transform_data->transform_type() != ATTRIBUTE_OCTAHEDRON_TRANSFORM) { - return false; // Wrong transform type. - } - quantization_bits_ = transform_data->GetParameterValue(0); - return true; -} - -void AttributeOctahedronTransform::CopyToAttributeTransformData( - AttributeTransformData *out_data) const { - out_data->set_transform_type(ATTRIBUTE_OCTAHEDRON_TRANSFORM); - out_data->AppendParameterValue(quantization_bits_); -} - -bool AttributeOctahedronTransform::TransformAttribute( - const PointAttribute &attribute, const std::vector &point_ids, - PointAttribute *target_attribute) { - return GeneratePortableAttribute(attribute, point_ids, - target_attribute->size(), target_attribute); -} - -bool AttributeOctahedronTransform::InverseTransformAttribute( - const PointAttribute &attribute, PointAttribute *target_attribute) { - if (target_attribute->data_type() != DT_FLOAT32) { - return false; - } - - const int num_points = target_attribute->size(); - const int num_components = target_attribute->num_components(); - if (num_components != 3) { - return false; - } - constexpr int kEntrySize = sizeof(float) * 3; - float att_val[3]; - const int32_t *source_attribute_data = reinterpret_cast( - attribute.GetAddress(AttributeValueIndex(0))); - uint8_t *target_address = - target_attribute->GetAddress(AttributeValueIndex(0)); - OctahedronToolBox octahedron_tool_box; - if (!octahedron_tool_box.SetQuantizationBits(quantization_bits_)) { - return false; - } - for (uint32_t i = 0; i < num_points; ++i) { - const int32_t s = *source_attribute_data++; - const int32_t t = *source_attribute_data++; - octahedron_tool_box.QuantizedOctahedralCoordsToUnitVector(s, t, att_val); - - // Store the decoded floating point values into the attribute buffer. - std::memcpy(target_address, att_val, kEntrySize); - target_address += kEntrySize; - } - return true; -} - -void AttributeOctahedronTransform::SetParameters(int quantization_bits) { - quantization_bits_ = quantization_bits; -} - -bool AttributeOctahedronTransform::EncodeParameters( - EncoderBuffer *encoder_buffer) const { - if (is_initialized()) { - encoder_buffer->Encode(static_cast(quantization_bits_)); - return true; - } - return false; -} - -bool AttributeOctahedronTransform::DecodeParameters( - const PointAttribute &attribute, DecoderBuffer *decoder_buffer) { - uint8_t quantization_bits; - if (!decoder_buffer->Decode(&quantization_bits)) { - return false; - } - quantization_bits_ = quantization_bits; - return true; -} - -bool AttributeOctahedronTransform::GeneratePortableAttribute( - const PointAttribute &attribute, const std::vector &point_ids, - int num_points, PointAttribute *target_attribute) const { - DRACO_DCHECK(is_initialized()); - - // Quantize all values in the order given by point_ids into portable - // attribute. - int32_t *const portable_attribute_data = reinterpret_cast( - target_attribute->GetAddress(AttributeValueIndex(0))); - float att_val[3]; - int32_t dst_index = 0; - OctahedronToolBox converter; - if (!converter.SetQuantizationBits(quantization_bits_)) { - return false; - } - if (!point_ids.empty()) { - for (uint32_t i = 0; i < point_ids.size(); ++i) { - const AttributeValueIndex att_val_id = - attribute.mapped_index(point_ids[i]); - attribute.GetValue(att_val_id, att_val); - // Encode the vector into a s and t octahedral coordinates. - int32_t s, t; - converter.FloatVectorToQuantizedOctahedralCoords(att_val, &s, &t); - portable_attribute_data[dst_index++] = s; - portable_attribute_data[dst_index++] = t; - } - } else { - for (PointIndex i(0); i < num_points; ++i) { - const AttributeValueIndex att_val_id = attribute.mapped_index(i); - attribute.GetValue(att_val_id, att_val); - // Encode the vector into a s and t octahedral coordinates. - int32_t s, t; - converter.FloatVectorToQuantizedOctahedralCoords(att_val, &s, &t); - portable_attribute_data[dst_index++] = s; - portable_attribute_data[dst_index++] = t; - } - } - - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/attributes/attribute_octahedron_transform.h b/libs/assimp/contrib/draco/src/draco/attributes/attribute_octahedron_transform.h deleted file mode 100644 index 21a1725..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/attribute_octahedron_transform.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef DRACO_ATTRIBUTES_ATTRIBUTE_OCTAHEDRON_TRANSFORM_H_ -#define DRACO_ATTRIBUTES_ATTRIBUTE_OCTAHEDRON_TRANSFORM_H_ - -#include "draco/attributes/attribute_transform.h" -#include "draco/attributes/point_attribute.h" -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// Attribute transform for attributes transformed to octahedral coordinates. -class AttributeOctahedronTransform : public AttributeTransform { - public: - AttributeOctahedronTransform() : quantization_bits_(-1) {} - - // Return attribute transform type. - AttributeTransformType Type() const override { - return ATTRIBUTE_OCTAHEDRON_TRANSFORM; - } - // Try to init transform from attribute. - bool InitFromAttribute(const PointAttribute &attribute) override; - // Copy parameter values into the provided AttributeTransformData instance. - void CopyToAttributeTransformData( - AttributeTransformData *out_data) const override; - - bool TransformAttribute(const PointAttribute &attribute, - const std::vector &point_ids, - PointAttribute *target_attribute) override; - - bool InverseTransformAttribute(const PointAttribute &attribute, - PointAttribute *target_attribute) override; - - // Set number of quantization bits. - void SetParameters(int quantization_bits); - - // Encode relevant parameters into buffer. - bool EncodeParameters(EncoderBuffer *encoder_buffer) const override; - - bool DecodeParameters(const PointAttribute &attribute, - DecoderBuffer *decoder_buffer) override; - - bool is_initialized() const { return quantization_bits_ != -1; } - int32_t quantization_bits() const { return quantization_bits_; } - - protected: - DataType GetTransformedDataType( - const PointAttribute &attribute) const override { - return DT_UINT32; - } - int GetTransformedNumComponents( - const PointAttribute &attribute) const override { - return 2; - } - - // Perform the actual transformation. - bool GeneratePortableAttribute(const PointAttribute &attribute, - const std::vector &point_ids, - int num_points, - PointAttribute *target_attribute) const; - - private: - int32_t quantization_bits_; -}; - -} // namespace draco - -#endif // DRACO_ATTRIBUTES_ATTRIBUTE_OCTAHEDRON_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/attributes/attribute_quantization_transform.cc b/libs/assimp/contrib/draco/src/draco/attributes/attribute_quantization_transform.cc deleted file mode 100644 index a7f93a4..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/attribute_quantization_transform.cc +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/attributes/attribute_quantization_transform.h" - -#include "draco/attributes/attribute_transform_type.h" -#include "draco/core/quantization_utils.h" - -namespace draco { - -bool AttributeQuantizationTransform::InitFromAttribute( - const PointAttribute &attribute) { - const AttributeTransformData *const transform_data = - attribute.GetAttributeTransformData(); - if (!transform_data || - transform_data->transform_type() != ATTRIBUTE_QUANTIZATION_TRANSFORM) { - return false; // Wrong transform type. - } - int32_t byte_offset = 0; - quantization_bits_ = transform_data->GetParameterValue(byte_offset); - byte_offset += 4; - min_values_.resize(attribute.num_components()); - for (int i = 0; i < attribute.num_components(); ++i) { - min_values_[i] = transform_data->GetParameterValue(byte_offset); - byte_offset += 4; - } - range_ = transform_data->GetParameterValue(byte_offset); - return true; -} - -// Copy parameter values into the provided AttributeTransformData instance. -void AttributeQuantizationTransform::CopyToAttributeTransformData( - AttributeTransformData *out_data) const { - out_data->set_transform_type(ATTRIBUTE_QUANTIZATION_TRANSFORM); - out_data->AppendParameterValue(quantization_bits_); - for (int i = 0; i < min_values_.size(); ++i) { - out_data->AppendParameterValue(min_values_[i]); - } - out_data->AppendParameterValue(range_); -} - -bool AttributeQuantizationTransform::TransformAttribute( - const PointAttribute &attribute, const std::vector &point_ids, - PointAttribute *target_attribute) { - if (point_ids.empty()) { - GeneratePortableAttribute(attribute, target_attribute->size(), - target_attribute); - } else { - GeneratePortableAttribute(attribute, point_ids, target_attribute->size(), - target_attribute); - } - return true; -} - -bool AttributeQuantizationTransform::InverseTransformAttribute( - const PointAttribute &attribute, PointAttribute *target_attribute) { - if (target_attribute->data_type() != DT_FLOAT32) { - return false; - } - - // Convert all quantized values back to floats. - const int32_t max_quantized_value = - (1u << static_cast(quantization_bits_)) - 1; - const int num_components = target_attribute->num_components(); - const int entry_size = sizeof(float) * num_components; - const std::unique_ptr att_val(new float[num_components]); - int quant_val_id = 0; - int out_byte_pos = 0; - Dequantizer dequantizer; - if (!dequantizer.Init(range_, max_quantized_value)) { - return false; - } - const int32_t *const source_attribute_data = - reinterpret_cast( - attribute.GetAddress(AttributeValueIndex(0))); - - const int num_values = target_attribute->size(); - - for (uint32_t i = 0; i < num_values; ++i) { - for (int c = 0; c < num_components; ++c) { - float value = - dequantizer.DequantizeFloat(source_attribute_data[quant_val_id++]); - value = value + min_values_[c]; - att_val[c] = value; - } - // Store the floating point value into the attribute buffer. - target_attribute->buffer()->Write(out_byte_pos, att_val.get(), entry_size); - out_byte_pos += entry_size; - } - return true; -} - -bool AttributeQuantizationTransform::IsQuantizationValid( - int quantization_bits) { - // Currently we allow only up to 30 bit quantization. - return quantization_bits >= 1 && quantization_bits <= 30; -} - -bool AttributeQuantizationTransform::SetParameters(int quantization_bits, - const float *min_values, - int num_components, - float range) { - if (!IsQuantizationValid(quantization_bits)) { - return false; - } - quantization_bits_ = quantization_bits; - min_values_.assign(min_values, min_values + num_components); - range_ = range; - return true; -} - -bool AttributeQuantizationTransform::ComputeParameters( - const PointAttribute &attribute, const int quantization_bits) { - if (quantization_bits_ != -1) { - return false; // already initialized. - } - if (!IsQuantizationValid(quantization_bits)) { - return false; - } - quantization_bits_ = quantization_bits; - - const int num_components = attribute.num_components(); - range_ = 0.f; - min_values_ = std::vector(num_components, 0.f); - const std::unique_ptr max_values(new float[num_components]); - const std::unique_ptr att_val(new float[num_components]); - // Compute minimum values and max value difference. - attribute.GetValue(AttributeValueIndex(0), att_val.get()); - attribute.GetValue(AttributeValueIndex(0), min_values_.data()); - attribute.GetValue(AttributeValueIndex(0), max_values.get()); - - for (AttributeValueIndex i(1); i < static_cast(attribute.size()); - ++i) { - attribute.GetValue(i, att_val.get()); - for (int c = 0; c < num_components; ++c) { - if (min_values_[c] > att_val[c]) { - min_values_[c] = att_val[c]; - } - if (max_values[c] < att_val[c]) { - max_values[c] = att_val[c]; - } - } - } - for (int c = 0; c < num_components; ++c) { - if (std::isnan(min_values_[c]) || std::isinf(min_values_[c]) || - std::isnan(max_values[c]) || std::isinf(max_values[c])) { - return false; - } - const float dif = max_values[c] - min_values_[c]; - if (dif > range_) { - range_ = dif; - } - } - - // In case all values are the same, initialize the range to unit length. This - // will ensure that all values are quantized properly to the same value. - if (range_ == 0.f) { - range_ = 1.f; - } - - return true; -} - -bool AttributeQuantizationTransform::EncodeParameters( - EncoderBuffer *encoder_buffer) const { - if (is_initialized()) { - encoder_buffer->Encode(min_values_.data(), - sizeof(float) * min_values_.size()); - encoder_buffer->Encode(range_); - encoder_buffer->Encode(static_cast(quantization_bits_)); - return true; - } - return false; -} - -bool AttributeQuantizationTransform::DecodeParameters( - const PointAttribute &attribute, DecoderBuffer *decoder_buffer) { - min_values_.resize(attribute.num_components()); - if (!decoder_buffer->Decode(&min_values_[0], - sizeof(float) * min_values_.size())) { - return false; - } - if (!decoder_buffer->Decode(&range_)) { - return false; - } - uint8_t quantization_bits; - if (!decoder_buffer->Decode(&quantization_bits)) { - return false; - } - if (!IsQuantizationValid(quantization_bits)) { - return false; - } - quantization_bits_ = quantization_bits; - return true; -} - -void AttributeQuantizationTransform::GeneratePortableAttribute( - const PointAttribute &attribute, int num_points, - PointAttribute *target_attribute) const { - DRACO_DCHECK(is_initialized()); - - const int num_components = attribute.num_components(); - - // Quantize all values using the order given by point_ids. - int32_t *const portable_attribute_data = reinterpret_cast( - target_attribute->GetAddress(AttributeValueIndex(0))); - const uint32_t max_quantized_value = (1 << (quantization_bits_)) - 1; - Quantizer quantizer; - quantizer.Init(range(), max_quantized_value); - int32_t dst_index = 0; - const std::unique_ptr att_val(new float[num_components]); - for (PointIndex i(0); i < num_points; ++i) { - const AttributeValueIndex att_val_id = attribute.mapped_index(i); - attribute.GetValue(att_val_id, att_val.get()); - for (int c = 0; c < num_components; ++c) { - const float value = (att_val[c] - min_values()[c]); - const int32_t q_val = quantizer.QuantizeFloat(value); - portable_attribute_data[dst_index++] = q_val; - } - } -} - -void AttributeQuantizationTransform::GeneratePortableAttribute( - const PointAttribute &attribute, const std::vector &point_ids, - int num_points, PointAttribute *target_attribute) const { - DRACO_DCHECK(is_initialized()); - - const int num_components = attribute.num_components(); - - // Quantize all values using the order given by point_ids. - int32_t *const portable_attribute_data = reinterpret_cast( - target_attribute->GetAddress(AttributeValueIndex(0))); - const uint32_t max_quantized_value = (1 << (quantization_bits_)) - 1; - Quantizer quantizer; - quantizer.Init(range(), max_quantized_value); - int32_t dst_index = 0; - const std::unique_ptr att_val(new float[num_components]); - for (uint32_t i = 0; i < point_ids.size(); ++i) { - const AttributeValueIndex att_val_id = attribute.mapped_index(point_ids[i]); - attribute.GetValue(att_val_id, att_val.get()); - for (int c = 0; c < num_components; ++c) { - const float value = (att_val[c] - min_values()[c]); - const int32_t q_val = quantizer.QuantizeFloat(value); - portable_attribute_data[dst_index++] = q_val; - } - } -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/attributes/attribute_quantization_transform.h b/libs/assimp/contrib/draco/src/draco/attributes/attribute_quantization_transform.h deleted file mode 100644 index f1122b6..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/attribute_quantization_transform.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ATTRIBUTES_ATTRIBUTE_QUANTIZATION_TRANSFORM_H_ -#define DRACO_ATTRIBUTES_ATTRIBUTE_QUANTIZATION_TRANSFORM_H_ - -#include - -#include "draco/attributes/attribute_transform.h" -#include "draco/attributes/point_attribute.h" -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// Attribute transform for quantized attributes. -class AttributeQuantizationTransform : public AttributeTransform { - public: - AttributeQuantizationTransform() : quantization_bits_(-1), range_(0.f) {} - // Return attribute transform type. - AttributeTransformType Type() const override { - return ATTRIBUTE_QUANTIZATION_TRANSFORM; - } - // Try to init transform from attribute. - bool InitFromAttribute(const PointAttribute &attribute) override; - // Copy parameter values into the provided AttributeTransformData instance. - void CopyToAttributeTransformData( - AttributeTransformData *out_data) const override; - - bool TransformAttribute(const PointAttribute &attribute, - const std::vector &point_ids, - PointAttribute *target_attribute) override; - - bool InverseTransformAttribute(const PointAttribute &attribute, - PointAttribute *target_attribute) override; - - bool SetParameters(int quantization_bits, const float *min_values, - int num_components, float range); - - bool ComputeParameters(const PointAttribute &attribute, - const int quantization_bits); - - // Encode relevant parameters into buffer. - bool EncodeParameters(EncoderBuffer *encoder_buffer) const override; - - bool DecodeParameters(const PointAttribute &attribute, - DecoderBuffer *decoder_buffer) override; - - int32_t quantization_bits() const { return quantization_bits_; } - float min_value(int axis) const { return min_values_[axis]; } - const std::vector &min_values() const { return min_values_; } - float range() const { return range_; } - bool is_initialized() const { return quantization_bits_ != -1; } - - protected: - // Create portable attribute using 1:1 mapping between points in the input and - // output attribute. - void GeneratePortableAttribute(const PointAttribute &attribute, - int num_points, - PointAttribute *target_attribute) const; - - // Create portable attribute using custom mapping between input and output - // points. - void GeneratePortableAttribute(const PointAttribute &attribute, - const std::vector &point_ids, - int num_points, - PointAttribute *target_attribute) const; - - DataType GetTransformedDataType( - const PointAttribute &attribute) const override { - return DT_UINT32; - } - int GetTransformedNumComponents( - const PointAttribute &attribute) const override { - return attribute.num_components(); - } - - static bool IsQuantizationValid(int quantization_bits); - - private: - int32_t quantization_bits_; - - // Minimal dequantized value for each component of the attribute. - std::vector min_values_; - - // Bounds of the dequantized attribute (max delta over all components). - float range_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTE_DEQUANTIZATION_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform.cc b/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform.cc deleted file mode 100644 index 174e6b8..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform.cc +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/attributes/attribute_transform.h" - -namespace draco { - -bool AttributeTransform::TransferToAttribute(PointAttribute *attribute) const { - std::unique_ptr transform_data( - new AttributeTransformData()); - this->CopyToAttributeTransformData(transform_data.get()); - attribute->SetAttributeTransformData(std::move(transform_data)); - return true; -} - -std::unique_ptr AttributeTransform::InitTransformedAttribute( - const PointAttribute &src_attribute, int num_entries) { - const int num_components = GetTransformedNumComponents(src_attribute); - const DataType dt = GetTransformedDataType(src_attribute); - GeometryAttribute va; - va.Init(src_attribute.attribute_type(), nullptr, num_components, dt, false, - num_components * DataTypeLength(dt), 0); - std::unique_ptr transformed_attribute(new PointAttribute(va)); - transformed_attribute->Reset(num_entries); - transformed_attribute->SetIdentityMapping(); - return transformed_attribute; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform.h b/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform.h deleted file mode 100644 index 62aad60..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_H_ -#define DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_H_ - -#include "draco/attributes/attribute_transform_data.h" -#include "draco/attributes/point_attribute.h" -#include "draco/core/decoder_buffer.h" -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// Virtual base class for various attribute transforms, enforcing common -// interface where possible. -class AttributeTransform { - public: - virtual ~AttributeTransform() = default; - - // Return attribute transform type. - virtual AttributeTransformType Type() const = 0; - // Try to init transform from attribute. - virtual bool InitFromAttribute(const PointAttribute &attribute) = 0; - // Copy parameter values into the provided AttributeTransformData instance. - virtual void CopyToAttributeTransformData( - AttributeTransformData *out_data) const = 0; - bool TransferToAttribute(PointAttribute *attribute) const; - - // Applies the transform to |attribute| and stores the result in - // |target_attribute|. |point_ids| is an optional vector that can be used to - // remap values during the transform. - virtual bool TransformAttribute(const PointAttribute &attribute, - const std::vector &point_ids, - PointAttribute *target_attribute) = 0; - - // Applies an inverse transform to |attribute| and stores the result in - // |target_attribute|. In this case, |attribute| is an attribute that was - // already transformed (e.g. quantized) and |target_attribute| is the - // attribute before the transformation. - virtual bool InverseTransformAttribute(const PointAttribute &attribute, - PointAttribute *target_attribute) = 0; - - // Encodes all data needed by the transformation into the |encoder_buffer|. - virtual bool EncodeParameters(EncoderBuffer *encoder_buffer) const = 0; - - // Decodes all data needed to transform |attribute| back to the original - // format. - virtual bool DecodeParameters(const PointAttribute &attribute, - DecoderBuffer *decoder_buffer) = 0; - - // Initializes a transformed attribute that can be used as target in the - // TransformAttribute() function call. - virtual std::unique_ptr InitTransformedAttribute( - const PointAttribute &src_attribute, int num_entries); - - protected: - virtual DataType GetTransformedDataType( - const PointAttribute &attribute) const = 0; - virtual int GetTransformedNumComponents( - const PointAttribute &attribute) const = 0; -}; - -} // namespace draco - -#endif // DRACO_ATTRIBUTES_ATTRIBUTE_OCTAHEDRON_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform_data.h b/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform_data.h deleted file mode 100644 index 96ed073..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform_data.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_DATA_H_ -#define DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_DATA_H_ - -#include - -#include "draco/attributes/attribute_transform_type.h" -#include "draco/core/data_buffer.h" - -namespace draco { - -// Class for holding parameter values for an attribute transform of a -// PointAttribute. This can be for example quantization data for an attribute -// that holds quantized values. This class provides only a basic storage for -// attribute transform parameters and it should be accessed only through wrapper -// classes for a specific transform (e.g. AttributeQuantizationTransform). -class AttributeTransformData { - public: - AttributeTransformData() : transform_type_(ATTRIBUTE_INVALID_TRANSFORM) {} - AttributeTransformData(const AttributeTransformData &data) = default; - - // Returns the type of the attribute transform that is described by the class. - AttributeTransformType transform_type() const { return transform_type_; } - void set_transform_type(AttributeTransformType type) { - transform_type_ = type; - } - - // Returns a parameter value on a given |byte_offset|. - template - DataTypeT GetParameterValue(int byte_offset) const { - DataTypeT out_data; - buffer_.Read(byte_offset, &out_data, sizeof(DataTypeT)); - return out_data; - } - - // Sets a parameter value on a given |byte_offset|. - template - void SetParameterValue(int byte_offset, const DataTypeT &in_data) { - if (byte_offset + sizeof(DataTypeT) > buffer_.data_size()) { - buffer_.Resize(byte_offset + sizeof(DataTypeT)); - } - buffer_.Write(byte_offset, &in_data, sizeof(DataTypeT)); - } - - // Sets a parameter value at the end of the |buffer_|. - template - void AppendParameterValue(const DataTypeT &in_data) { - SetParameterValue(static_cast(buffer_.data_size()), in_data); - } - - private: - AttributeTransformType transform_type_; - DataBuffer buffer_; -}; - -} // namespace draco - -#endif // DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_DATA_H_ diff --git a/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform_type.h b/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform_type.h deleted file mode 100644 index 51ce6f3..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/attribute_transform_type.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_TYPE_H_ -#define DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_TYPE_H_ - -namespace draco { - -// List of all currently supported attribute transforms. -enum AttributeTransformType { - ATTRIBUTE_INVALID_TRANSFORM = -1, - ATTRIBUTE_NO_TRANSFORM = 0, - ATTRIBUTE_QUANTIZATION_TRANSFORM = 1, - ATTRIBUTE_OCTAHEDRON_TRANSFORM = 2, -}; - -} // namespace draco - -#endif // DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_TYPE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/attributes/geometry_attribute.cc b/libs/assimp/contrib/draco/src/draco/attributes/geometry_attribute.cc deleted file mode 100644 index b624784..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/geometry_attribute.cc +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/attributes/geometry_attribute.h" - -namespace draco { - -GeometryAttribute::GeometryAttribute() - : buffer_(nullptr), - num_components_(1), - data_type_(DT_FLOAT32), - byte_stride_(0), - byte_offset_(0), - attribute_type_(INVALID), - unique_id_(0) {} - -void GeometryAttribute::Init(GeometryAttribute::Type attribute_type, - DataBuffer *buffer, int8_t num_components, - DataType data_type, bool normalized, - int64_t byte_stride, int64_t byte_offset) { - buffer_ = buffer; - if (buffer) { - buffer_descriptor_.buffer_id = buffer->buffer_id(); - buffer_descriptor_.buffer_update_count = buffer->update_count(); - } - num_components_ = num_components; - data_type_ = data_type; - normalized_ = normalized; - byte_stride_ = byte_stride; - byte_offset_ = byte_offset; - attribute_type_ = attribute_type; -} - -bool GeometryAttribute::CopyFrom(const GeometryAttribute &src_att) { - num_components_ = src_att.num_components_; - data_type_ = src_att.data_type_; - normalized_ = src_att.normalized_; - byte_stride_ = src_att.byte_stride_; - byte_offset_ = src_att.byte_offset_; - attribute_type_ = src_att.attribute_type_; - buffer_descriptor_ = src_att.buffer_descriptor_; - unique_id_ = src_att.unique_id_; - if (src_att.buffer_ == nullptr) { - buffer_ = nullptr; - } else { - if (buffer_ == nullptr) { - return false; - } - buffer_->Update(src_att.buffer_->data(), src_att.buffer_->data_size()); - } - return true; -} - -bool GeometryAttribute::operator==(const GeometryAttribute &va) const { - if (attribute_type_ != va.attribute_type_) { - return false; - } - // It's OK to compare just the buffer descriptors here. We don't need to - // compare the buffers themselves. - if (buffer_descriptor_.buffer_id != va.buffer_descriptor_.buffer_id) { - return false; - } - if (buffer_descriptor_.buffer_update_count != - va.buffer_descriptor_.buffer_update_count) { - return false; - } - if (num_components_ != va.num_components_) { - return false; - } - if (data_type_ != va.data_type_) { - return false; - } - if (byte_stride_ != va.byte_stride_) { - return false; - } - if (byte_offset_ != va.byte_offset_) { - return false; - } - return true; -} - -void GeometryAttribute::ResetBuffer(DataBuffer *buffer, int64_t byte_stride, - int64_t byte_offset) { - buffer_ = buffer; - buffer_descriptor_.buffer_id = buffer->buffer_id(); - buffer_descriptor_.buffer_update_count = buffer->update_count(); - byte_stride_ = byte_stride; - byte_offset_ = byte_offset; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/attributes/geometry_attribute.h b/libs/assimp/contrib/draco/src/draco/attributes/geometry_attribute.h deleted file mode 100644 index f4d099b..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/geometry_attribute.h +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ATTRIBUTES_GEOMETRY_ATTRIBUTE_H_ -#define DRACO_ATTRIBUTES_GEOMETRY_ATTRIBUTE_H_ - -#include -#include - -#include "draco/attributes/geometry_indices.h" -#include "draco/core/data_buffer.h" -#include "draco/core/hash_utils.h" - -namespace draco { - -// The class provides access to a specific attribute which is stored in a -// DataBuffer, such as normals or coordinates. However, the GeometryAttribute -// class does not own the buffer and the buffer itself may store other data -// unrelated to this attribute (such as data for other attributes in which case -// we can have multiple GeometryAttributes accessing one buffer). Typically, -// all attributes for a point (or corner, face) are stored in one block, which -// is advantageous in terms of memory access. The length of the entire block is -// given by the byte_stride, the position where the attribute starts is given by -// the byte_offset, the actual number of bytes that the attribute occupies is -// given by the data_type and the number of components. -class GeometryAttribute { - public: - // Supported attribute types. - enum Type { - INVALID = -1, - // Named attributes start here. The difference between named and generic - // attributes is that for named attributes we know their purpose and we - // can apply some special methods when dealing with them (e.g. during - // encoding). - POSITION = 0, - NORMAL, - COLOR, - TEX_COORD, - // A special id used to mark attributes that are not assigned to any known - // predefined use case. Such attributes are often used for a shader specific - // data. - GENERIC, - // Total number of different attribute types. - // Always keep behind all named attributes. - NAMED_ATTRIBUTES_COUNT, - }; - - GeometryAttribute(); - // Initializes and enables the attribute. - void Init(Type attribute_type, DataBuffer *buffer, int8_t num_components, - DataType data_type, bool normalized, int64_t byte_stride, - int64_t byte_offset); - bool IsValid() const { return buffer_ != nullptr; } - - // Copies data from the source attribute to the this attribute. - // This attribute must have a valid buffer allocated otherwise the operation - // is going to fail and return false. - bool CopyFrom(const GeometryAttribute &src_att); - - // Function for getting a attribute value with a specific format. - // Unsafe. Caller must ensure the accessed memory is valid. - // T is the attribute data type. - // att_components_t is the number of attribute components. - template - std::array GetValue( - AttributeValueIndex att_index) const { - // Byte address of the attribute index. - const int64_t byte_pos = byte_offset_ + byte_stride_ * att_index.value(); - std::array out; - buffer_->Read(byte_pos, &(out[0]), sizeof(out)); - return out; - } - - // Function for getting a attribute value with a specific format. - // T is the attribute data type. - // att_components_t is the number of attribute components. - template - bool GetValue(AttributeValueIndex att_index, - std::array *out) const { - // Byte address of the attribute index. - const int64_t byte_pos = byte_offset_ + byte_stride_ * att_index.value(); - // Check we are not reading past end of data. - if (byte_pos + sizeof(*out) > buffer_->data_size()) { - return false; - } - buffer_->Read(byte_pos, &((*out)[0]), sizeof(*out)); - return true; - } - - // Returns the byte position of the attribute entry in the data buffer. - inline int64_t GetBytePos(AttributeValueIndex att_index) const { - return byte_offset_ + byte_stride_ * att_index.value(); - } - - inline const uint8_t *GetAddress(AttributeValueIndex att_index) const { - const int64_t byte_pos = GetBytePos(att_index); - return buffer_->data() + byte_pos; - } - inline uint8_t *GetAddress(AttributeValueIndex att_index) { - const int64_t byte_pos = GetBytePos(att_index); - return buffer_->data() + byte_pos; - } - inline bool IsAddressValid(const uint8_t *address) const { - return ((buffer_->data() + buffer_->data_size()) > address); - } - - // Fills out_data with the raw value of the requested attribute entry. - // out_data must be at least byte_stride_ long. - void GetValue(AttributeValueIndex att_index, void *out_data) const { - const int64_t byte_pos = byte_offset_ + byte_stride_ * att_index.value(); - buffer_->Read(byte_pos, out_data, byte_stride_); - } - - // Sets a value of an attribute entry. The input value must be allocated to - // cover all components of a single attribute entry. - void SetAttributeValue(AttributeValueIndex entry_index, const void *value) { - const int64_t byte_pos = entry_index.value() * byte_stride(); - buffer_->Write(byte_pos, value, byte_stride()); - } - - // DEPRECATED: Use - // ConvertValue(AttributeValueIndex att_id, - // int out_num_components, - // OutT *out_val); - // - // Function for conversion of a attribute to a specific output format. - // OutT is the desired data type of the attribute. - // out_att_components_t is the number of components of the output format. - // Returns false when the conversion failed. - template - bool ConvertValue(AttributeValueIndex att_id, OutT *out_val) const { - return ConvertValue(att_id, out_att_components_t, out_val); - } - - // Function for conversion of a attribute to a specific output format. - // |out_val| needs to be able to store |out_num_components| values. - // OutT is the desired data type of the attribute. - // Returns false when the conversion failed. - template - bool ConvertValue(AttributeValueIndex att_id, int8_t out_num_components, - OutT *out_val) const { - if (out_val == nullptr) { - return false; - } - switch (data_type_) { - case DT_INT8: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_UINT8: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_INT16: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_UINT16: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_INT32: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_UINT32: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_INT64: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_UINT64: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_FLOAT32: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_FLOAT64: - return ConvertTypedValue(att_id, out_num_components, - out_val); - case DT_BOOL: - return ConvertTypedValue(att_id, out_num_components, - out_val); - default: - // Wrong attribute type. - return false; - } - } - - // Function for conversion of a attribute to a specific output format. - // The |out_value| must be able to store all components of a single attribute - // entry. - // OutT is the desired data type of the attribute. - // Returns false when the conversion failed. - template - bool ConvertValue(AttributeValueIndex att_index, OutT *out_value) const { - return ConvertValue(att_index, num_components_, out_value); - } - - // Utility function. Returns |attribute_type| as std::string. - static std::string TypeToString(Type attribute_type) { - switch (attribute_type) { - case INVALID: - return "INVALID"; - case POSITION: - return "POSITION"; - case NORMAL: - return "NORMAL"; - case COLOR: - return "COLOR"; - case TEX_COORD: - return "TEX_COORD"; - case GENERIC: - return "GENERIC"; - default: - return "UNKNOWN"; - } - } - - bool operator==(const GeometryAttribute &va) const; - - // Returns the type of the attribute indicating the nature of the attribute. - Type attribute_type() const { return attribute_type_; } - void set_attribute_type(Type type) { attribute_type_ = type; } - // Returns the data type that is stored in the attribute. - DataType data_type() const { return data_type_; } - // Returns the number of components that are stored for each entry. - // For position attribute this is usually three (x,y,z), - // while texture coordinates have two components (u,v). - int8_t num_components() const { return num_components_; } - // Indicates whether the data type should be normalized before interpretation, - // that is, it should be divided by the max value of the data type. - bool normalized() const { return normalized_; } - // The buffer storing the entire data of the attribute. - const DataBuffer *buffer() const { return buffer_; } - // Returns the number of bytes between two attribute entries, this is, at - // least size of the data types times number of components. - int64_t byte_stride() const { return byte_stride_; } - // The offset where the attribute starts within the block of size byte_stride. - int64_t byte_offset() const { return byte_offset_; } - void set_byte_offset(int64_t byte_offset) { byte_offset_ = byte_offset; } - DataBufferDescriptor buffer_descriptor() const { return buffer_descriptor_; } - uint32_t unique_id() const { return unique_id_; } - void set_unique_id(uint32_t id) { unique_id_ = id; } - - protected: - // Sets a new internal storage for the attribute. - void ResetBuffer(DataBuffer *buffer, int64_t byte_stride, - int64_t byte_offset); - - private: - // Function for conversion of an attribute to a specific output format given a - // format of the stored attribute. - // T is the stored attribute data type. - // OutT is the desired data type of the attribute. - template - bool ConvertTypedValue(AttributeValueIndex att_id, int8_t out_num_components, - OutT *out_value) const { - const uint8_t *src_address = GetAddress(att_id); - - // Convert all components available in both the original and output formats. - for (int i = 0; i < std::min(num_components_, out_num_components); ++i) { - if (!IsAddressValid(src_address)) { - return false; - } - const T in_value = *reinterpret_cast(src_address); - - // Make sure the in_value fits within the range of values that OutT - // is able to represent. Perform the check only for integral types. - if (std::is_integral::value && std::is_integral::value) { - static constexpr OutT kOutMin = - std::is_signed::value ? std::numeric_limits::lowest() : 0; - if (in_value < kOutMin || in_value > std::numeric_limits::max()) { - return false; - } - } - - out_value[i] = static_cast(in_value); - // When converting integer to floating point, normalize the value if - // necessary. - if (std::is_integral::value && std::is_floating_point::value && - normalized_) { - out_value[i] /= static_cast(std::numeric_limits::max()); - } - // TODO(ostava): Add handling of normalized attributes when converting - // between different integer representations. If the attribute is - // normalized, integer values should be converted as if they represent 0-1 - // range. E.g. when we convert uint16 to uint8, the range <0, 2^16 - 1> - // should be converted to range <0, 2^8 - 1>. - src_address += sizeof(T); - } - // Fill empty data for unused output components if needed. - for (int i = num_components_; i < out_num_components; ++i) { - out_value[i] = static_cast(0); - } - return true; - } - - DataBuffer *buffer_; - // The buffer descriptor is stored at the time the buffer is attached to this - // attribute. The purpose is to detect if any changes happened to the buffer - // since the time it was attached. - DataBufferDescriptor buffer_descriptor_; - int8_t num_components_; - DataType data_type_; - bool normalized_; - int64_t byte_stride_; - int64_t byte_offset_; - - Type attribute_type_; - - // Unique id of this attribute. No two attributes could have the same unique - // id. It is used to identify each attribute, especially when there are - // multiple attribute of the same type in a point cloud. - uint32_t unique_id_; - - friend struct GeometryAttributeHasher; -}; - -// Hashing support - -// Function object for using Attribute as a hash key. -struct GeometryAttributeHasher { - size_t operator()(const GeometryAttribute &va) const { - size_t hash = HashCombine(va.buffer_descriptor_.buffer_id, - va.buffer_descriptor_.buffer_update_count); - hash = HashCombine(va.num_components_, hash); - hash = HashCombine(static_cast(va.data_type_), hash); - hash = HashCombine(static_cast(va.attribute_type_), hash); - hash = HashCombine(va.byte_stride_, hash); - return HashCombine(va.byte_offset_, hash); - } -}; - -// Function object for using GeometryAttribute::Type as a hash key. -struct GeometryAttributeTypeHasher { - size_t operator()(const GeometryAttribute::Type &at) const { - return static_cast(at); - } -}; - -} // namespace draco - -#endif // DRACO_ATTRIBUTES_GEOMETRY_ATTRIBUTE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/attributes/geometry_indices.h b/libs/assimp/contrib/draco/src/draco/attributes/geometry_indices.h deleted file mode 100644 index 80e43e3..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/geometry_indices.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ATTRIBUTES_GEOMETRY_INDICES_H_ -#define DRACO_ATTRIBUTES_GEOMETRY_INDICES_H_ - -#include - -#include - -#include "draco/core/draco_index_type.h" - -namespace draco { - -// Index of an attribute value entry stored in a GeometryAttribute. -DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, AttributeValueIndex) -// Index of a point in a PointCloud. -DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, PointIndex) -// Vertex index in a Mesh or CornerTable. -DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, VertexIndex) -// Corner index that identifies a corner in a Mesh or CornerTable. -DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, CornerIndex) -// Face index for Mesh and CornerTable. -DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, FaceIndex) - -// Constants denoting invalid indices. -static constexpr AttributeValueIndex kInvalidAttributeValueIndex( - std::numeric_limits::max()); -static constexpr PointIndex kInvalidPointIndex( - std::numeric_limits::max()); -static constexpr VertexIndex kInvalidVertexIndex( - std::numeric_limits::max()); -static constexpr CornerIndex kInvalidCornerIndex( - std::numeric_limits::max()); -static constexpr FaceIndex kInvalidFaceIndex( - std::numeric_limits::max()); - -// TODO(ostava): Add strongly typed indices for attribute id and unique -// attribute id. - -} // namespace draco - -#endif // DRACO_ATTRIBUTES_GEOMETRY_INDICES_H_ diff --git a/libs/assimp/contrib/draco/src/draco/attributes/point_attribute.cc b/libs/assimp/contrib/draco/src/draco/attributes/point_attribute.cc deleted file mode 100644 index b28f860..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/point_attribute.cc +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/attributes/point_attribute.h" - -#include - -using std::unordered_map; - -// Shortcut for typed conditionals. -template -using conditional_t = typename std::conditional::type; - -namespace draco { - -PointAttribute::PointAttribute() - : num_unique_entries_(0), identity_mapping_(false) {} - -PointAttribute::PointAttribute(const GeometryAttribute &att) - : GeometryAttribute(att), - num_unique_entries_(0), - identity_mapping_(false) {} - -void PointAttribute::Init(Type attribute_type, int8_t num_components, - DataType data_type, bool normalized, - size_t num_attribute_values) { - attribute_buffer_ = std::unique_ptr(new DataBuffer()); - GeometryAttribute::Init(attribute_type, attribute_buffer_.get(), - num_components, data_type, normalized, - DataTypeLength(data_type) * num_components, 0); - Reset(num_attribute_values); - SetIdentityMapping(); -} - -void PointAttribute::CopyFrom(const PointAttribute &src_att) { - if (buffer() == nullptr) { - // If the destination attribute doesn't have a valid buffer, create it. - attribute_buffer_ = std::unique_ptr(new DataBuffer()); - ResetBuffer(attribute_buffer_.get(), 0, 0); - } - if (!GeometryAttribute::CopyFrom(src_att)) { - return; - } - identity_mapping_ = src_att.identity_mapping_; - num_unique_entries_ = src_att.num_unique_entries_; - indices_map_ = src_att.indices_map_; - if (src_att.attribute_transform_data_) { - attribute_transform_data_ = std::unique_ptr( - new AttributeTransformData(*src_att.attribute_transform_data_)); - } else { - attribute_transform_data_ = nullptr; - } -} - -bool PointAttribute::Reset(size_t num_attribute_values) { - if (attribute_buffer_ == nullptr) { - attribute_buffer_ = std::unique_ptr(new DataBuffer()); - } - const int64_t entry_size = DataTypeLength(data_type()) * num_components(); - if (!attribute_buffer_->Update(nullptr, num_attribute_values * entry_size)) { - return false; - } - // Assign the new buffer to the parent attribute. - ResetBuffer(attribute_buffer_.get(), entry_size, 0); - num_unique_entries_ = static_cast(num_attribute_values); - return true; -} - -void PointAttribute::Resize(size_t new_num_unique_entries) { - num_unique_entries_ = static_cast(new_num_unique_entries); - attribute_buffer_->Resize(new_num_unique_entries * byte_stride()); -} - -#ifdef DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED -AttributeValueIndex::ValueType PointAttribute::DeduplicateValues( - const GeometryAttribute &in_att) { - return DeduplicateValues(in_att, AttributeValueIndex(0)); -} - -AttributeValueIndex::ValueType PointAttribute::DeduplicateValues( - const GeometryAttribute &in_att, AttributeValueIndex in_att_offset) { - AttributeValueIndex::ValueType unique_vals = 0; - switch (in_att.data_type()) { - // Currently we support only float, uint8, and uint16 arguments. - case DT_FLOAT32: - unique_vals = DeduplicateTypedValues(in_att, in_att_offset); - break; - case DT_INT8: - unique_vals = DeduplicateTypedValues(in_att, in_att_offset); - break; - case DT_UINT8: - case DT_BOOL: - unique_vals = DeduplicateTypedValues(in_att, in_att_offset); - break; - case DT_UINT16: - unique_vals = DeduplicateTypedValues(in_att, in_att_offset); - break; - case DT_INT16: - unique_vals = DeduplicateTypedValues(in_att, in_att_offset); - break; - case DT_UINT32: - unique_vals = DeduplicateTypedValues(in_att, in_att_offset); - break; - case DT_INT32: - unique_vals = DeduplicateTypedValues(in_att, in_att_offset); - break; - default: - return -1; // Unsupported data type. - } - if (unique_vals == 0) { - return -1; // Unexpected error. - } - return unique_vals; -} - -// Helper function for calling UnifyDuplicateAttributes -// with the correct template arguments. -// Returns the number of unique attribute values. -template -AttributeValueIndex::ValueType PointAttribute::DeduplicateTypedValues( - const GeometryAttribute &in_att, AttributeValueIndex in_att_offset) { - // Select the correct method to call based on the number of attribute - // components. - switch (in_att.num_components()) { - case 1: - return DeduplicateFormattedValues(in_att, in_att_offset); - case 2: - return DeduplicateFormattedValues(in_att, in_att_offset); - case 3: - return DeduplicateFormattedValues(in_att, in_att_offset); - case 4: - return DeduplicateFormattedValues(in_att, in_att_offset); - default: - return 0; - } -} - -template -AttributeValueIndex::ValueType PointAttribute::DeduplicateFormattedValues( - const GeometryAttribute &in_att, AttributeValueIndex in_att_offset) { - // We want to detect duplicates using a hash map but we cannot hash floating - // point numbers directly so bit-copy floats to the same sized integers and - // hash them. - - // First we need to determine which int type to use (1, 2, 4 or 8 bytes). - // Note, this is done at compile time using std::conditional struct. - // Conditional is in form . If bool-expression - // is true the "true" branch is used and vice versa. All at compile time. - typedef conditional_t>> - HashType; - - AttributeValueIndex unique_vals(0); - typedef std::array AttributeValue; - typedef std::array AttributeHashableValue; - // Hash map storing index of the first attribute with a given value. - unordered_map> - value_to_index_map; - AttributeValue att_value; - AttributeHashableValue hashable_value; - IndexTypeVector value_map( - num_unique_entries_); - for (AttributeValueIndex i(0); i < num_unique_entries_; ++i) { - const AttributeValueIndex att_pos = i + in_att_offset; - att_value = in_att.GetValue(att_pos); - // Convert the value to hashable type. Bit-copy real attributes to integers. - memcpy(&(hashable_value[0]), &(att_value[0]), sizeof(att_value)); - - // Check if the given attribute value has been used before already. - auto it = value_to_index_map.find(hashable_value); - if (it != value_to_index_map.end()) { - // Duplicated value found. Update index mapping. - value_map[i] = it->second; - } else { - // New unique value. - // Update the hash map with a new entry pointing to the latest unique - // vertex index. - value_to_index_map.insert( - std::pair(hashable_value, - unique_vals)); - // Add the unique value to the mesh builder. - SetAttributeValue(unique_vals, &att_value); - // Update index mapping. - value_map[i] = unique_vals; - - ++unique_vals; - } - } - if (unique_vals == num_unique_entries_) { - return unique_vals.value(); // Nothing has changed. - } - if (is_mapping_identity()) { - // Change identity mapping to the explicit one. - // The number of points is equal to the number of old unique values. - SetExplicitMapping(num_unique_entries_); - // Update the explicit map. - for (uint32_t i = 0; i < num_unique_entries_; ++i) { - SetPointMapEntry(PointIndex(i), value_map[AttributeValueIndex(i)]); - } - } else { - // Update point to value map using the mapping between old and new values. - for (PointIndex i(0); i < static_cast(indices_map_.size()); ++i) { - SetPointMapEntry(i, value_map[indices_map_[i]]); - } - } - num_unique_entries_ = unique_vals.value(); - return num_unique_entries_; -} -#endif - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/attributes/point_attribute.h b/libs/assimp/contrib/draco/src/draco/attributes/point_attribute.h deleted file mode 100644 index ee36620..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/point_attribute.h +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_ATTRIBUTES_POINT_ATTRIBUTE_H_ -#define DRACO_ATTRIBUTES_POINT_ATTRIBUTE_H_ - -#include - -#include "draco/attributes/attribute_transform_data.h" -#include "draco/attributes/geometry_attribute.h" -#include "draco/core/draco_index_type_vector.h" -#include "draco/core/hash_utils.h" -#include "draco/core/macros.h" -#include "draco/draco_features.h" - -namespace draco { - -// Class for storing point specific data about each attribute. In general, -// multiple points stored in a point cloud can share the same attribute value -// and this class provides the necessary mapping between point ids and attribute -// value ids. -class PointAttribute : public GeometryAttribute { - public: - PointAttribute(); - explicit PointAttribute(const GeometryAttribute &att); - - // Make sure the move constructor is defined (needed for better performance - // when new attributes are added to PointCloud). - PointAttribute(PointAttribute &&attribute) = default; - PointAttribute &operator=(PointAttribute &&attribute) = default; - - // Initializes a point attribute. By default the attribute will be set to - // identity mapping between point indices and attribute values. To set custom - // mapping use SetExplicitMapping() function. - void Init(Type attribute_type, int8_t num_components, DataType data_type, - bool normalized, size_t num_attribute_values); - - // Copies attribute data from the provided |src_att| attribute. - void CopyFrom(const PointAttribute &src_att); - - // Prepares the attribute storage for the specified number of entries. - bool Reset(size_t num_attribute_values); - - size_t size() const { return num_unique_entries_; } - AttributeValueIndex mapped_index(PointIndex point_index) const { - if (identity_mapping_) { - return AttributeValueIndex(point_index.value()); - } - return indices_map_[point_index]; - } - DataBuffer *buffer() const { return attribute_buffer_.get(); } - bool is_mapping_identity() const { return identity_mapping_; } - size_t indices_map_size() const { - if (is_mapping_identity()) { - return 0; - } - return indices_map_.size(); - } - - const uint8_t *GetAddressOfMappedIndex(PointIndex point_index) const { - return GetAddress(mapped_index(point_index)); - } - - // Sets the new number of unique attribute entries for the attribute. The - // function resizes the attribute storage to hold |num_attribute_values| - // entries. - // All previous entries with AttributeValueIndex < |num_attribute_values| - // are preserved. Caller needs to ensure that the PointAttribute is still - // valid after the resizing operation (that is, each point is mapped to a - // valid attribute value). - void Resize(size_t new_num_unique_entries); - - // Functions for setting the type of mapping between point indices and - // attribute entry ids. - // This function sets the mapping to implicit, where point indices are equal - // to attribute entry indices. - void SetIdentityMapping() { - identity_mapping_ = true; - indices_map_.clear(); - } - // This function sets the mapping to be explicitly using the indices_map_ - // array that needs to be initialized by the caller. - void SetExplicitMapping(size_t num_points) { - identity_mapping_ = false; - indices_map_.resize(num_points, kInvalidAttributeValueIndex); - } - - // Set an explicit map entry for a specific point index. - void SetPointMapEntry(PointIndex point_index, - AttributeValueIndex entry_index) { - DRACO_DCHECK(!identity_mapping_); - indices_map_[point_index] = entry_index; - } - - // Same as GeometryAttribute::GetValue(), but using point id as the input. - // Mapping to attribute value index is performed automatically. - void GetMappedValue(PointIndex point_index, void *out_data) const { - return GetValue(mapped_index(point_index), out_data); - } - -#ifdef DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED - // Deduplicate |in_att| values into |this| attribute. |in_att| can be equal - // to |this|. - // Returns -1 if the deduplication failed. - AttributeValueIndex::ValueType DeduplicateValues( - const GeometryAttribute &in_att); - - // Same as above but the values read from |in_att| are sampled with the - // provided offset |in_att_offset|. - AttributeValueIndex::ValueType DeduplicateValues( - const GeometryAttribute &in_att, AttributeValueIndex in_att_offset); -#endif - - // Set attribute transform data for the attribute. The data is used to store - // the type and parameters of the transform that is applied on the attribute - // data (optional). - void SetAttributeTransformData( - std::unique_ptr transform_data) { - attribute_transform_data_ = std::move(transform_data); - } - const AttributeTransformData *GetAttributeTransformData() const { - return attribute_transform_data_.get(); - } - - private: -#ifdef DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED - template - AttributeValueIndex::ValueType DeduplicateTypedValues( - const GeometryAttribute &in_att, AttributeValueIndex in_att_offset); - template - AttributeValueIndex::ValueType DeduplicateFormattedValues( - const GeometryAttribute &in_att, AttributeValueIndex in_att_offset); -#endif - - // Data storage for attribute values. GeometryAttribute itself doesn't own its - // buffer so we need to allocate it here. - std::unique_ptr attribute_buffer_; - - // Mapping between point ids and attribute value ids. - IndexTypeVector indices_map_; - AttributeValueIndex::ValueType num_unique_entries_; - // Flag when the mapping between point ids and attribute values is identity. - bool identity_mapping_; - - // If an attribute contains transformed data (e.g. quantized), we can specify - // the attribute transform here and use it to transform the attribute back to - // its original format. - std::unique_ptr attribute_transform_data_; - - friend struct PointAttributeHasher; -}; - -// Hash functor for the PointAttribute class. -struct PointAttributeHasher { - size_t operator()(const PointAttribute &attribute) const { - GeometryAttributeHasher base_hasher; - size_t hash = base_hasher(attribute); - hash = HashCombine(attribute.identity_mapping_, hash); - hash = HashCombine(attribute.num_unique_entries_, hash); - hash = HashCombine(attribute.indices_map_.size(), hash); - if (!attribute.indices_map_.empty()) { - const uint64_t indices_hash = FingerprintString( - reinterpret_cast(attribute.indices_map_.data()), - attribute.indices_map_.size()); - hash = HashCombine(indices_hash, hash); - } - if (attribute.attribute_buffer_ != nullptr) { - const uint64_t buffer_hash = FingerprintString( - reinterpret_cast(attribute.attribute_buffer_->data()), - attribute.attribute_buffer_->data_size()); - hash = HashCombine(buffer_hash, hash); - } - return hash; - } -}; - -} // namespace draco - -#endif // DRACO_ATTRIBUTES_POINT_ATTRIBUTE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/attributes/point_attribute_test.cc b/libs/assimp/contrib/draco/src/draco/attributes/point_attribute_test.cc deleted file mode 100644 index 4ae23fb..0000000 --- a/libs/assimp/contrib/draco/src/draco/attributes/point_attribute_test.cc +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/attributes/point_attribute.h" - -#include "draco/core/draco_test_base.h" - -namespace { - -class PointAttributeTest : public ::testing::Test { - protected: - PointAttributeTest() {} -}; - -TEST_F(PointAttributeTest, TestCopy) { - // This test verifies that PointAttribute can copy data from another point - // attribute. - draco::PointAttribute pa; - pa.Init(draco::GeometryAttribute::POSITION, 1, draco::DT_INT32, false, 10); - - for (int32_t i = 0; i < 10; ++i) { - pa.SetAttributeValue(draco::AttributeValueIndex(i), &i); - } - - pa.set_unique_id(12); - - draco::PointAttribute other_pa; - other_pa.CopyFrom(pa); - - draco::PointAttributeHasher hasher; - ASSERT_EQ(hasher(pa), hasher(other_pa)); - ASSERT_EQ(pa.unique_id(), other_pa.unique_id()); - - // The hash function does not actually compute the hash from attribute values, - // so ensure the data got copied correctly as well. - for (int32_t i = 0; i < 10; ++i) { - int32_t data; - other_pa.GetValue(draco::AttributeValueIndex(i), &data); - ASSERT_EQ(data, i); - } -} - -TEST_F(PointAttributeTest, TestGetValueFloat) { - draco::PointAttribute pa; - pa.Init(draco::GeometryAttribute::POSITION, 3, draco::DT_FLOAT32, false, 5); - float points[3]; - for (int32_t i = 0; i < 5; ++i) { - points[0] = i * 3.0; - points[1] = (i * 3.0) + 1.0; - points[2] = (i * 3.0) + 2.0; - pa.SetAttributeValue(draco::AttributeValueIndex(i), &points); - } - - for (int32_t i = 0; i < 5; ++i) { - pa.GetValue(draco::AttributeValueIndex(i), &points); - ASSERT_FLOAT_EQ(points[0], i * 3.0); - ASSERT_FLOAT_EQ(points[1], (i * 3.0) + 1.0); - ASSERT_FLOAT_EQ(points[2], (i * 3.0) + 2.0); - } -} - -TEST_F(PointAttributeTest, TestGetArray) { - draco::PointAttribute pa; - pa.Init(draco::GeometryAttribute::POSITION, 3, draco::DT_FLOAT32, false, 5); - float points[3]; - for (int32_t i = 0; i < 5; ++i) { - points[0] = i * 3.0; - points[1] = (i * 3.0) + 1.0; - points[2] = (i * 3.0) + 2.0; - pa.SetAttributeValue(draco::AttributeValueIndex(i), &points); - } - - for (int32_t i = 0; i < 5; ++i) { - std::array att_value; - att_value = pa.GetValue(draco::AttributeValueIndex(i)); - ASSERT_FLOAT_EQ(att_value[0], i * 3.0); - ASSERT_FLOAT_EQ(att_value[1], (i * 3.0) + 1.0); - ASSERT_FLOAT_EQ(att_value[2], (i * 3.0) + 2.0); - } - for (int32_t i = 0; i < 5; ++i) { - std::array att_value; - EXPECT_TRUE( - (pa.GetValue(draco::AttributeValueIndex(i), &att_value))); - ASSERT_FLOAT_EQ(att_value[0], i * 3.0); - ASSERT_FLOAT_EQ(att_value[1], (i * 3.0) + 1.0); - ASSERT_FLOAT_EQ(att_value[2], (i * 3.0) + 2.0); - } -} - -TEST_F(PointAttributeTest, TestArrayReadError) { - draco::PointAttribute pa; - pa.Init(draco::GeometryAttribute::POSITION, 3, draco::DT_FLOAT32, false, 5); - float points[3]; - for (int32_t i = 0; i < 5; ++i) { - points[0] = i * 3.0; - points[1] = (i * 3.0) + 1.0; - points[2] = (i * 3.0) + 2.0; - pa.SetAttributeValue(draco::AttributeValueIndex(i), &points); - } - - std::array att_value; - EXPECT_FALSE( - (pa.GetValue(draco::AttributeValueIndex(5), &att_value))); -} - -TEST_F(PointAttributeTest, TestResize) { - draco::PointAttribute pa; - pa.Init(draco::GeometryAttribute::POSITION, 3, draco::DT_FLOAT32, false, 5); - ASSERT_EQ(pa.size(), 5); - ASSERT_EQ(pa.buffer()->data_size(), 4 * 3 * 5); - - pa.Resize(10); - ASSERT_EQ(pa.size(), 10); - ASSERT_EQ(pa.buffer()->data_size(), 4 * 3 * 10); -} - -} // namespace diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder.cc deleted file mode 100644 index 007dd2f..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder.cc +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/attributes_decoder.h" - -#include "draco/core/varint_decoding.h" - -namespace draco { - -AttributesDecoder::AttributesDecoder() - : point_cloud_decoder_(nullptr), point_cloud_(nullptr) {} - -bool AttributesDecoder::Init(PointCloudDecoder *decoder, PointCloud *pc) { - point_cloud_decoder_ = decoder; - point_cloud_ = pc; - return true; -} - -bool AttributesDecoder::DecodeAttributesDecoderData(DecoderBuffer *in_buffer) { - // Decode and create attributes. - uint32_t num_attributes; -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (point_cloud_decoder_->bitstream_version() < - DRACO_BITSTREAM_VERSION(2, 0)) { - if (!in_buffer->Decode(&num_attributes)) { - return false; - } - } else -#endif - { - if (!DecodeVarint(&num_attributes, in_buffer)) { - return false; - } - } - - // Check that decoded number of attributes is valid. - if (num_attributes == 0) { - return false; - } - if (num_attributes > 5 * in_buffer->remaining_size()) { - // The decoded number of attributes is unreasonably high, because at least - // five bytes of attribute descriptor data per attribute are expected. - return false; - } - - // Decode attribute descriptor data. - point_attribute_ids_.resize(num_attributes); - PointCloud *pc = point_cloud_; - for (uint32_t i = 0; i < num_attributes; ++i) { - // Decode attribute descriptor data. - uint8_t att_type, data_type, num_components, normalized; - if (!in_buffer->Decode(&att_type)) { - return false; - } - if (!in_buffer->Decode(&data_type)) { - return false; - } - if (!in_buffer->Decode(&num_components)) { - return false; - } - if (!in_buffer->Decode(&normalized)) { - return false; - } - if (att_type >= GeometryAttribute::NAMED_ATTRIBUTES_COUNT) { - return false; - } - if (data_type == DT_INVALID || data_type >= DT_TYPES_COUNT) { - return false; - } - - // Check decoded attribute descriptor data. - if (num_components == 0) { - return false; - } - - // Add the attribute to the point cloud. - const DataType draco_dt = static_cast(data_type); - GeometryAttribute ga; - ga.Init(static_cast(att_type), nullptr, - num_components, draco_dt, normalized > 0, - DataTypeLength(draco_dt) * num_components, 0); - uint32_t unique_id; -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (point_cloud_decoder_->bitstream_version() < - DRACO_BITSTREAM_VERSION(1, 3)) { - uint16_t custom_id; - if (!in_buffer->Decode(&custom_id)) { - return false; - } - // TODO(draco-eng): Add "custom_id" to attribute metadata. - unique_id = static_cast(custom_id); - ga.set_unique_id(unique_id); - } else -#endif - { - if (!DecodeVarint(&unique_id, in_buffer)) { - return false; - } - ga.set_unique_id(unique_id); - } - const int att_id = pc->AddAttribute( - std::unique_ptr(new PointAttribute(ga))); - pc->attribute(att_id)->set_unique_id(unique_id); - point_attribute_ids_[i] = att_id; - - // Update the inverse map. - if (att_id >= - static_cast(point_attribute_to_local_id_map_.size())) { - point_attribute_to_local_id_map_.resize(att_id + 1, -1); - } - point_attribute_to_local_id_map_[att_id] = i; - } - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder.h deleted file mode 100644 index 5b2bb2c..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder.h +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_DECODER_H_ - -#include - -#include "draco/compression/attributes/attributes_decoder_interface.h" -#include "draco/compression/point_cloud/point_cloud_decoder.h" -#include "draco/core/decoder_buffer.h" -#include "draco/draco_features.h" -#include "draco/point_cloud/point_cloud.h" - -namespace draco { - -// Base class for decoding one or more attributes that were encoded with a -// matching AttributesEncoder. It is a basic implementation of -// AttributesDecoderInterface that provides functionality that is shared between -// all AttributesDecoders. -class AttributesDecoder : public AttributesDecoderInterface { - public: - AttributesDecoder(); - virtual ~AttributesDecoder() = default; - - // Called after all attribute decoders are created. It can be used to perform - // any custom initialization. - bool Init(PointCloudDecoder *decoder, PointCloud *pc) override; - - // Decodes any attribute decoder specific data from the |in_buffer|. - bool DecodeAttributesDecoderData(DecoderBuffer *in_buffer) override; - - int32_t GetAttributeId(int i) const override { - return point_attribute_ids_[i]; - } - int32_t GetNumAttributes() const override { - return static_cast(point_attribute_ids_.size()); - } - PointCloudDecoder *GetDecoder() const override { - return point_cloud_decoder_; - } - - // Decodes attribute data from the source buffer. - bool DecodeAttributes(DecoderBuffer *in_buffer) override { - if (!DecodePortableAttributes(in_buffer)) { - return false; - } - if (!DecodeDataNeededByPortableTransforms(in_buffer)) { - return false; - } - if (!TransformAttributesToOriginalFormat()) { - return false; - } - return true; - } - - protected: - int32_t GetLocalIdForPointAttribute(int32_t point_attribute_id) const { - const int id_map_size = - static_cast(point_attribute_to_local_id_map_.size()); - if (point_attribute_id >= id_map_size) { - return -1; - } - return point_attribute_to_local_id_map_[point_attribute_id]; - } - virtual bool DecodePortableAttributes(DecoderBuffer *in_buffer) = 0; - virtual bool DecodeDataNeededByPortableTransforms(DecoderBuffer *in_buffer) { - return true; - } - virtual bool TransformAttributesToOriginalFormat() { return true; } - - private: - // List of attribute ids that need to be decoded with this decoder. - std::vector point_attribute_ids_; - - // Map between point attribute id and the local id (i.e., the inverse of the - // |point_attribute_ids_|. - std::vector point_attribute_to_local_id_map_; - - PointCloudDecoder *point_cloud_decoder_; - PointCloud *point_cloud_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder_interface.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder_interface.h deleted file mode 100644 index 8e5cf52..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_decoder_interface.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_DECODER_INTERFACE_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_DECODER_INTERFACE_H_ - -#include - -#include "draco/core/decoder_buffer.h" -#include "draco/point_cloud/point_cloud.h" - -namespace draco { - -class PointCloudDecoder; - -// Interface class for decoding one or more attributes that were encoded with a -// matching AttributesEncoder. It provides only the basic interface -// that is used by the PointCloudDecoder. The actual decoding must be -// implemented in derived classes using the DecodeAttributes() method. -class AttributesDecoderInterface { - public: - AttributesDecoderInterface() = default; - virtual ~AttributesDecoderInterface() = default; - - // Called after all attribute decoders are created. It can be used to perform - // any custom initialization. - virtual bool Init(PointCloudDecoder *decoder, PointCloud *pc) = 0; - - // Decodes any attribute decoder specific data from the |in_buffer|. - virtual bool DecodeAttributesDecoderData(DecoderBuffer *in_buffer) = 0; - - // Decode attribute data from the source buffer. Needs to be implemented by - // the derived classes. - virtual bool DecodeAttributes(DecoderBuffer *in_buffer) = 0; - - virtual int32_t GetAttributeId(int i) const = 0; - virtual int32_t GetNumAttributes() const = 0; - virtual PointCloudDecoder *GetDecoder() const = 0; - - // Returns an attribute containing data processed by the attribute transform. - // (see TransformToPortableFormat() method). This data is guaranteed to be - // same for encoder and decoder and it can be used by predictors. - virtual const PointAttribute *GetPortableAttribute( - int32_t /* point_attribute_id */) { - return nullptr; - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_DECODER_INTERFACE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_encoder.cc deleted file mode 100644 index 797c62f..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_encoder.cc +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/attributes_encoder.h" - -#include "draco/core/varint_encoding.h" - -namespace draco { - -AttributesEncoder::AttributesEncoder() - : point_cloud_encoder_(nullptr), point_cloud_(nullptr) {} - -AttributesEncoder::AttributesEncoder(int att_id) : AttributesEncoder() { - AddAttributeId(att_id); -} - -bool AttributesEncoder::Init(PointCloudEncoder *encoder, const PointCloud *pc) { - point_cloud_encoder_ = encoder; - point_cloud_ = pc; - return true; -} - -bool AttributesEncoder::EncodeAttributesEncoderData(EncoderBuffer *out_buffer) { - // Encode data about all attributes. - EncodeVarint(num_attributes(), out_buffer); - for (uint32_t i = 0; i < num_attributes(); ++i) { - const int32_t att_id = point_attribute_ids_[i]; - const PointAttribute *const pa = point_cloud_->attribute(att_id); - out_buffer->Encode(static_cast(pa->attribute_type())); - out_buffer->Encode(static_cast(pa->data_type())); - out_buffer->Encode(static_cast(pa->num_components())); - out_buffer->Encode(static_cast(pa->normalized())); - EncodeVarint(pa->unique_id(), out_buffer); - } - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_encoder.h deleted file mode 100644 index 9de846a..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/attributes_encoder.h +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_ENCODER_H_ - -#include "draco/attributes/point_attribute.h" -#include "draco/core/encoder_buffer.h" -#include "draco/point_cloud/point_cloud.h" - -namespace draco { - -class PointCloudEncoder; - -// Base class for encoding one or more attributes of a PointCloud (or other -// geometry). This base class provides only the basic interface that is used -// by the PointCloudEncoder. -class AttributesEncoder { - public: - AttributesEncoder(); - // Constructs an attribute encoder associated with a given point attribute. - explicit AttributesEncoder(int point_attrib_id); - virtual ~AttributesEncoder() = default; - - // Called after all attribute encoders are created. It can be used to perform - // any custom initialization, including setting up attribute dependencies. - // Note: no data should be encoded in this function, because the decoder may - // process encoders in a different order from the decoder. - virtual bool Init(PointCloudEncoder *encoder, const PointCloud *pc); - - // Encodes data needed by the target attribute decoder. - virtual bool EncodeAttributesEncoderData(EncoderBuffer *out_buffer); - - // Returns a unique identifier of the given encoder type, that is used during - // decoding to construct the corresponding attribute decoder. - virtual uint8_t GetUniqueId() const = 0; - - // Encode attribute data to the target buffer. - virtual bool EncodeAttributes(EncoderBuffer *out_buffer) { - if (!TransformAttributesToPortableFormat()) { - return false; - } - if (!EncodePortableAttributes(out_buffer)) { - return false; - } - // Encode data needed by portable transforms after the attribute is encoded. - // This corresponds to the order in which the data is going to be decoded by - // the decoder. - if (!EncodeDataNeededByPortableTransforms(out_buffer)) { - return false; - } - return true; - } - - // Returns the number of attributes that need to be encoded before the - // specified attribute is encoded. - // Note that the attribute is specified by its point attribute id. - virtual int NumParentAttributes(int32_t /* point_attribute_id */) const { - return 0; - } - - virtual int GetParentAttributeId(int32_t /* point_attribute_id */, - int32_t /* parent_i */) const { - return -1; - } - - // Marks a given attribute as a parent of another attribute. - virtual bool MarkParentAttribute(int32_t /* point_attribute_id */) { - return false; - } - - // Returns an attribute containing data processed by the attribute transform. - // (see TransformToPortableFormat() method). This data is guaranteed to be - // encoded losslessly and it can be safely used for predictors. - virtual const PointAttribute *GetPortableAttribute( - int32_t /* point_attribute_id */) { - return nullptr; - } - - void AddAttributeId(int32_t id) { - point_attribute_ids_.push_back(id); - if (id >= static_cast(point_attribute_to_local_id_map_.size())) { - point_attribute_to_local_id_map_.resize(id + 1, -1); - } - point_attribute_to_local_id_map_[id] = - static_cast(point_attribute_ids_.size()) - 1; - } - - // Sets new attribute point ids (replacing the existing ones). - void SetAttributeIds(const std::vector &point_attribute_ids) { - point_attribute_ids_.clear(); - point_attribute_to_local_id_map_.clear(); - for (int32_t att_id : point_attribute_ids) { - AddAttributeId(att_id); - } - } - - int32_t GetAttributeId(int i) const { return point_attribute_ids_[i]; } - uint32_t num_attributes() const { - return static_cast(point_attribute_ids_.size()); - } - PointCloudEncoder *encoder() const { return point_cloud_encoder_; } - - protected: - // Transforms the input attribute data into a form that should be losslessly - // encoded (transform itself can be lossy). - virtual bool TransformAttributesToPortableFormat() { return true; } - - // Losslessly encodes data of all portable attributes. - // Precondition: All attributes must have been transformed into portable - // format at this point (see TransformAttributesToPortableFormat() method). - virtual bool EncodePortableAttributes(EncoderBuffer *out_buffer) = 0; - - // Encodes any data needed to revert the transform to portable format for each - // attribute (e.g. data needed for dequantization of quantized values). - virtual bool EncodeDataNeededByPortableTransforms(EncoderBuffer *out_buffer) { - return true; - } - - int32_t GetLocalIdForPointAttribute(int32_t point_attribute_id) const { - const int id_map_size = - static_cast(point_attribute_to_local_id_map_.size()); - if (point_attribute_id >= id_map_size) { - return -1; - } - return point_attribute_to_local_id_map_[point_attribute_id]; - } - - private: - // List of attribute ids that need to be encoded with this encoder. - std::vector point_attribute_ids_; - - // Map between point attribute id and the local id (i.e., the inverse of the - // |point_attribute_ids_|. - std::vector point_attribute_to_local_id_map_; - - PointCloudEncoder *point_cloud_encoder_; - const PointCloud *point_cloud_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTES_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_decoder.cc deleted file mode 100644 index e4d5348..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_decoder.cc +++ /dev/null @@ -1,556 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/kd_tree_attributes_decoder.h" - -#include "draco/compression/attributes/kd_tree_attributes_shared.h" -#include "draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.h" -#include "draco/compression/point_cloud/algorithms/float_points_tree_decoder.h" -#include "draco/compression/point_cloud/point_cloud_decoder.h" -#include "draco/core/draco_types.h" -#include "draco/core/varint_decoding.h" - -namespace draco { - -// attribute, offset_dimensionality, data_type, data_size, num_components -using AttributeTuple = - std::tuple; - -// Output iterator that is used to decode values directly into the data buffer -// of the modified PointAttribute. -// The extension of this iterator beyond the DT_UINT32 concerns itself only with -// the size of the data for efficiency, not the type. DataType is conveyed in -// but is an unused field populated for any future logic/special casing. -// DT_UINT32 and all other 4-byte types are naturally supported from the size of -// data in the kd tree encoder. DT_UINT16 and DT_UINT8 are supported by way -// of byte copies into a temporary memory buffer. -template -class PointAttributeVectorOutputIterator { - typedef PointAttributeVectorOutputIterator Self; - - public: - PointAttributeVectorOutputIterator( - PointAttributeVectorOutputIterator &&that) = default; - - explicit PointAttributeVectorOutputIterator( - const std::vector &atts) - : attributes_(atts), point_id_(0) { - DRACO_DCHECK_GE(atts.size(), 1); - uint32_t required_decode_bytes = 0; - for (auto index = 0; index < attributes_.size(); index++) { - const AttributeTuple &att = attributes_[index]; - required_decode_bytes = (std::max)(required_decode_bytes, - std::get<3>(att) * std::get<4>(att)); - } - memory_.resize(required_decode_bytes); - data_ = memory_.data(); - } - - const Self &operator++() { - ++point_id_; - return *this; - } - - // We do not want to do ANY copying of this constructor so this particular - // operator is disabled for performance reasons. - // Self operator++(int) { - // Self copy = *this; - // ++point_id_; - // return copy; - // } - - Self &operator*() { return *this; } - // Still needed in some cases. - // TODO(hemmer): remove. - // hardcoded to 3 based on legacy usage. - const Self &operator=(const VectorD &val) { - DRACO_DCHECK_EQ(attributes_.size(), 1); // Expect only ONE attribute. - AttributeTuple &att = attributes_[0]; - PointAttribute *attribute = std::get<0>(att); - const uint32_t &offset = std::get<1>(att); - DRACO_DCHECK_EQ(offset, 0); // expected to be zero - attribute->SetAttributeValue(attribute->mapped_index(point_id_), - &val[0] + offset); - return *this; - } - // Additional operator taking std::vector as argument. - const Self &operator=(const std::vector &val) { - for (auto index = 0; index < attributes_.size(); index++) { - AttributeTuple &att = attributes_[index]; - PointAttribute *attribute = std::get<0>(att); - const uint32_t &offset = std::get<1>(att); - const uint32_t &data_size = std::get<3>(att); - const uint32_t &num_components = std::get<4>(att); - const uint32_t *data_source = val.data() + offset; - if (data_size < 4) { // handle uint16_t, uint8_t - // selectively copy data bytes - uint8_t *data_counter = data_; - for (uint32_t index = 0; index < num_components; - index += 1, data_counter += data_size) { - std::memcpy(data_counter, data_source + index, data_size); - } - // redirect to copied data - data_source = reinterpret_cast(data_); - } - const AttributeValueIndex avi = attribute->mapped_index(point_id_); - if (avi >= static_cast(attribute->size())) { - return *this; - } - attribute->SetAttributeValue(avi, data_source); - } - return *this; - } - - private: - // preallocated memory for buffering different data sizes. Never reallocated. - std::vector memory_; - uint8_t *data_; - std::vector attributes_; - PointIndex point_id_; - - // NO COPY - PointAttributeVectorOutputIterator( - const PointAttributeVectorOutputIterator &that) = delete; - PointAttributeVectorOutputIterator &operator=( - PointAttributeVectorOutputIterator const &) = delete; -}; - -KdTreeAttributesDecoder::KdTreeAttributesDecoder() {} - -bool KdTreeAttributesDecoder::DecodePortableAttributes( - DecoderBuffer *in_buffer) { - if (in_buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 3)) { - // Old bitstream does everything in the - // DecodeDataNeededByPortableTransforms() method. - return true; - } - uint8_t compression_level = 0; - if (!in_buffer->Decode(&compression_level)) { - return false; - } - const int32_t num_points = GetDecoder()->point_cloud()->num_points(); - - // Decode data using the kd tree decoding into integer (portable) attributes. - // We first need to go over all attributes and create a new portable storage - // for those attributes that need it (floating point attributes that have to - // be dequantized after decoding). - - const int num_attributes = GetNumAttributes(); - uint32_t total_dimensionality = 0; // position is a required dimension - std::vector atts(num_attributes); - - for (int i = 0; i < GetNumAttributes(); ++i) { - const int att_id = GetAttributeId(i); - PointAttribute *const att = GetDecoder()->point_cloud()->attribute(att_id); - // All attributes have the same number of values and identity mapping - // between PointIndex and AttributeValueIndex. - att->Reset(num_points); - att->SetIdentityMapping(); - - PointAttribute *target_att = nullptr; - if (att->data_type() == DT_UINT32 || att->data_type() == DT_UINT16 || - att->data_type() == DT_UINT8) { - // We can decode to these attributes directly. - target_att = att; - } else if (att->data_type() == DT_INT32 || att->data_type() == DT_INT16 || - att->data_type() == DT_INT8) { - // Prepare storage for data that is used to convert unsigned values back - // to the signed ones. - for (int c = 0; c < att->num_components(); ++c) { - min_signed_values_.push_back(0); - } - target_att = att; - } else if (att->data_type() == DT_FLOAT32) { - // Create a portable attribute that will hold the decoded data. We will - // dequantize the decoded data to the final attribute later on. - const int num_components = att->num_components(); - GeometryAttribute va; - va.Init(att->attribute_type(), nullptr, num_components, DT_UINT32, false, - num_components * DataTypeLength(DT_UINT32), 0); - std::unique_ptr port_att(new PointAttribute(va)); - port_att->SetIdentityMapping(); - port_att->Reset(num_points); - quantized_portable_attributes_.push_back(std::move(port_att)); - target_att = quantized_portable_attributes_.back().get(); - } else { - // Unsupported type. - return false; - } - // Add attribute to the output iterator used by the core algorithm. - const DataType data_type = target_att->data_type(); - const uint32_t data_size = (std::max)(0, DataTypeLength(data_type)); - const uint32_t num_components = target_att->num_components(); - atts[i] = std::make_tuple(target_att, total_dimensionality, data_type, - data_size, num_components); - total_dimensionality += num_components; - } - PointAttributeVectorOutputIterator out_it(atts); - - switch (compression_level) { - case 0: { - DynamicIntegerPointsKdTreeDecoder<0> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 1: { - DynamicIntegerPointsKdTreeDecoder<1> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 2: { - DynamicIntegerPointsKdTreeDecoder<2> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 3: { - DynamicIntegerPointsKdTreeDecoder<3> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 4: { - DynamicIntegerPointsKdTreeDecoder<4> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 5: { - DynamicIntegerPointsKdTreeDecoder<5> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 6: { - DynamicIntegerPointsKdTreeDecoder<6> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - default: - return false; - } - return true; -} - -bool KdTreeAttributesDecoder::DecodeDataNeededByPortableTransforms( - DecoderBuffer *in_buffer) { - if (in_buffer->bitstream_version() >= DRACO_BITSTREAM_VERSION(2, 3)) { - // Decode quantization data for each attribute that need it. - // TODO(ostava): This should be moved to AttributeQuantizationTransform. - std::vector min_value; - for (int i = 0; i < GetNumAttributes(); ++i) { - const int att_id = GetAttributeId(i); - const PointAttribute *const att = - GetDecoder()->point_cloud()->attribute(att_id); - if (att->data_type() == DT_FLOAT32) { - const int num_components = att->num_components(); - min_value.resize(num_components); - if (!in_buffer->Decode(&min_value[0], sizeof(float) * num_components)) { - return false; - } - float max_value_dif; - if (!in_buffer->Decode(&max_value_dif)) { - return false; - } - uint8_t quantization_bits; - if (!in_buffer->Decode(&quantization_bits) || quantization_bits > 31) { - return false; - } - AttributeQuantizationTransform transform; - if (!transform.SetParameters(quantization_bits, min_value.data(), - num_components, max_value_dif)) { - return false; - } - const int num_transforms = - static_cast(attribute_quantization_transforms_.size()); - if (!transform.TransferToAttribute( - quantized_portable_attributes_[num_transforms].get())) { - return false; - } - attribute_quantization_transforms_.push_back(transform); - } - } - - // Decode transform data for signed integer attributes. - for (int i = 0; i < min_signed_values_.size(); ++i) { - int32_t val; - if (!DecodeVarint(&val, in_buffer)) { - return false; - } - min_signed_values_[i] = val; - } - return true; - } -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - // Handle old bitstream - // Figure out the total dimensionality of the point cloud - const uint32_t attribute_count = GetNumAttributes(); - uint32_t total_dimensionality = 0; // position is a required dimension - std::vector atts(attribute_count); - for (auto attribute_index = 0; - static_cast(attribute_index) < attribute_count; - attribute_index += 1) // increment the dimensionality as needed... - { - const int att_id = GetAttributeId(attribute_index); - PointAttribute *const att = GetDecoder()->point_cloud()->attribute(att_id); - const DataType data_type = att->data_type(); - const uint32_t data_size = (std::max)(0, DataTypeLength(data_type)); - const uint32_t num_components = att->num_components(); - if (data_size > 4) { - return false; - } - - atts[attribute_index] = std::make_tuple( - att, total_dimensionality, data_type, data_size, num_components); - // everything is treated as 32bit in the encoder. - total_dimensionality += num_components; - } - - const int att_id = GetAttributeId(0); - PointAttribute *const att = GetDecoder()->point_cloud()->attribute(att_id); - att->SetIdentityMapping(); - // Decode method - uint8_t method; - if (!in_buffer->Decode(&method)) { - return false; - } - if (method == KdTreeAttributesEncodingMethod::kKdTreeQuantizationEncoding) { - uint8_t compression_level = 0; - if (!in_buffer->Decode(&compression_level)) { - return false; - } - uint32_t num_points = 0; - if (!in_buffer->Decode(&num_points)) { - return false; - } - att->Reset(num_points); - FloatPointsTreeDecoder decoder; - decoder.set_num_points_from_header(num_points); - PointAttributeVectorOutputIterator out_it(atts); - if (!decoder.DecodePointCloud(in_buffer, out_it)) { - return false; - } - } else if (method == KdTreeAttributesEncodingMethod::kKdTreeIntegerEncoding) { - uint8_t compression_level = 0; - if (!in_buffer->Decode(&compression_level)) { - return false; - } - if (6 < compression_level) { - DRACO_LOGE( - "KdTreeAttributesDecoder: compression level %i not supported.\n", - compression_level); - return false; - } - - uint32_t num_points; - if (!in_buffer->Decode(&num_points)) { - return false; - } - - for (auto attribute_index = 0; - static_cast(attribute_index) < attribute_count; - attribute_index += 1) { - const int att_id = GetAttributeId(attribute_index); - PointAttribute *const attr = - GetDecoder()->point_cloud()->attribute(att_id); - attr->Reset(num_points); - attr->SetIdentityMapping(); - }; - - PointAttributeVectorOutputIterator out_it(atts); - - switch (compression_level) { - case 0: { - DynamicIntegerPointsKdTreeDecoder<0> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 1: { - DynamicIntegerPointsKdTreeDecoder<1> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 2: { - DynamicIntegerPointsKdTreeDecoder<2> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 3: { - DynamicIntegerPointsKdTreeDecoder<3> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 4: { - DynamicIntegerPointsKdTreeDecoder<4> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 5: { - DynamicIntegerPointsKdTreeDecoder<5> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - case 6: { - DynamicIntegerPointsKdTreeDecoder<6> decoder(total_dimensionality); - if (!decoder.DecodePoints(in_buffer, out_it)) { - return false; - } - break; - } - default: - return false; - } - } else { - // Invalid method. - return false; - } - return true; -#else - return false; -#endif -} - -template -bool KdTreeAttributesDecoder::TransformAttributeBackToSignedType( - PointAttribute *att, int num_processed_signed_components) { - typedef typename std::make_unsigned::type UnsignedType; - std::vector unsigned_val(att->num_components()); - std::vector signed_val(att->num_components()); - - for (AttributeValueIndex avi(0); avi < static_cast(att->size()); - ++avi) { - att->GetValue(avi, &unsigned_val[0]); - for (int c = 0; c < att->num_components(); ++c) { - // Up-cast |unsigned_val| to int32_t to ensure we don't overflow it for - // smaller data types. - signed_val[c] = static_cast( - static_cast(unsigned_val[c]) + - min_signed_values_[num_processed_signed_components + c]); - } - att->SetAttributeValue(avi, &signed_val[0]); - } - return true; -} - -bool KdTreeAttributesDecoder::TransformAttributesToOriginalFormat() { - if (quantized_portable_attributes_.empty() && min_signed_values_.empty()) { - return true; - } - int num_processed_quantized_attributes = 0; - int num_processed_signed_components = 0; - // Dequantize attributes that needed it. - for (int i = 0; i < GetNumAttributes(); ++i) { - const int att_id = GetAttributeId(i); - PointAttribute *const att = GetDecoder()->point_cloud()->attribute(att_id); - if (att->data_type() == DT_INT32 || att->data_type() == DT_INT16 || - att->data_type() == DT_INT8) { - std::vector unsigned_val(att->num_components()); - std::vector signed_val(att->num_components()); - // Values are stored as unsigned in the attribute, make them signed again. - if (att->data_type() == DT_INT32) { - if (!TransformAttributeBackToSignedType( - att, num_processed_signed_components)) { - return false; - } - } else if (att->data_type() == DT_INT16) { - if (!TransformAttributeBackToSignedType( - att, num_processed_signed_components)) { - return false; - } - } else if (att->data_type() == DT_INT8) { - if (!TransformAttributeBackToSignedType( - att, num_processed_signed_components)) { - return false; - } - } - num_processed_signed_components += att->num_components(); - } else if (att->data_type() == DT_FLOAT32) { - // TODO(ostava): This code should be probably moved out to attribute - // transform and shared with the SequentialQuantizationAttributeDecoder. - - const PointAttribute *const src_att = - quantized_portable_attributes_[num_processed_quantized_attributes] - .get(); - - const AttributeQuantizationTransform &transform = - attribute_quantization_transforms_ - [num_processed_quantized_attributes]; - - num_processed_quantized_attributes++; - - if (GetDecoder()->options()->GetAttributeBool( - att->attribute_type(), "skip_attribute_transform", false)) { - // Attribute transform should not be performed. In this case, we replace - // the output geometry attribute with the portable attribute. - // TODO(ostava): We can potentially avoid this copy by introducing a new - // mechanism that would allow to use the final attributes as portable - // attributes for predictors that may need them. - att->CopyFrom(*src_att); - continue; - } - - // Convert all quantized values back to floats. - const int32_t max_quantized_value = - (1u << static_cast(transform.quantization_bits())) - 1; - const int num_components = att->num_components(); - const int entry_size = sizeof(float) * num_components; - const std::unique_ptr att_val(new float[num_components]); - int quant_val_id = 0; - int out_byte_pos = 0; - Dequantizer dequantizer; - if (!dequantizer.Init(transform.range(), max_quantized_value)) { - return false; - } - const uint32_t *const portable_attribute_data = - reinterpret_cast( - src_att->GetAddress(AttributeValueIndex(0))); - for (uint32_t i = 0; i < src_att->size(); ++i) { - for (int c = 0; c < num_components; ++c) { - float value = dequantizer.DequantizeFloat( - portable_attribute_data[quant_val_id++]); - value = value + transform.min_value(c); - att_val[c] = value; - } - // Store the floating point value into the attribute buffer. - att->buffer()->Write(out_byte_pos, att_val.get(), entry_size); - out_byte_pos += entry_size; - } - } - } - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_decoder.h deleted file mode 100644 index 87338d6..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_decoder.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_DECODER_H_ - -#include "draco/attributes/attribute_quantization_transform.h" -#include "draco/compression/attributes/attributes_decoder.h" - -namespace draco { - -// Decodes attributes encoded with the KdTreeAttributesEncoder. -class KdTreeAttributesDecoder : public AttributesDecoder { - public: - KdTreeAttributesDecoder(); - - protected: - bool DecodePortableAttributes(DecoderBuffer *in_buffer) override; - bool DecodeDataNeededByPortableTransforms(DecoderBuffer *in_buffer) override; - bool TransformAttributesToOriginalFormat() override; - - private: - template - bool TransformAttributeBackToSignedType(PointAttribute *att, - int num_processed_signed_components); - - std::vector - attribute_quantization_transforms_; - std::vector min_signed_values_; - std::vector> quantized_portable_attributes_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_encoder.cc deleted file mode 100644 index b70deb9..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_encoder.cc +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/kd_tree_attributes_encoder.h" - -#include "draco/compression/attributes/kd_tree_attributes_shared.h" -#include "draco/compression/attributes/point_d_vector.h" -#include "draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.h" -#include "draco/compression/point_cloud/algorithms/float_points_tree_encoder.h" -#include "draco/compression/point_cloud/point_cloud_encoder.h" -#include "draco/core/varint_encoding.h" - -namespace draco { - -KdTreeAttributesEncoder::KdTreeAttributesEncoder() : num_components_(0) {} - -KdTreeAttributesEncoder::KdTreeAttributesEncoder(int att_id) - : AttributesEncoder(att_id), num_components_(0) {} - -bool KdTreeAttributesEncoder::TransformAttributesToPortableFormat() { - // Convert any of the input attributes into a format that can be processed by - // the kd tree encoder (quantization of floating attributes for now). - const size_t num_points = encoder()->point_cloud()->num_points(); - int num_components = 0; - for (uint32_t i = 0; i < num_attributes(); ++i) { - const int att_id = GetAttributeId(i); - const PointAttribute *const att = - encoder()->point_cloud()->attribute(att_id); - num_components += att->num_components(); - } - num_components_ = num_components; - - // Go over all attributes and quantize them if needed. - for (uint32_t i = 0; i < num_attributes(); ++i) { - const int att_id = GetAttributeId(i); - const PointAttribute *const att = - encoder()->point_cloud()->attribute(att_id); - if (att->data_type() == DT_FLOAT32) { - // Quantization path. - AttributeQuantizationTransform attribute_quantization_transform; - const int quantization_bits = encoder()->options()->GetAttributeInt( - att_id, "quantization_bits", -1); - if (quantization_bits < 1) { - return false; - } - if (encoder()->options()->IsAttributeOptionSet(att_id, - "quantization_origin") && - encoder()->options()->IsAttributeOptionSet(att_id, - "quantization_range")) { - // Quantization settings are explicitly specified in the provided - // options. - std::vector quantization_origin(att->num_components()); - encoder()->options()->GetAttributeVector(att_id, "quantization_origin", - att->num_components(), - &quantization_origin[0]); - const float range = encoder()->options()->GetAttributeFloat( - att_id, "quantization_range", 1.f); - attribute_quantization_transform.SetParameters( - quantization_bits, quantization_origin.data(), - att->num_components(), range); - } else { - // Compute quantization settings from the attribute values. - if (!attribute_quantization_transform.ComputeParameters( - *att, quantization_bits)) { - return false; - } - } - attribute_quantization_transforms_.push_back( - attribute_quantization_transform); - // Store the quantized attribute in an array that will be used when we do - // the actual encoding of the data. - auto portable_att = - attribute_quantization_transform.InitTransformedAttribute(*att, - num_points); - attribute_quantization_transform.TransformAttribute(*att, {}, - portable_att.get()); - quantized_portable_attributes_.push_back(std::move(portable_att)); - } else if (att->data_type() == DT_INT32 || att->data_type() == DT_INT16 || - att->data_type() == DT_INT8) { - // For signed types, find the minimum value for each component. These - // values are going to be used to transform the attribute values to - // unsigned integers that can be processed by the core kd tree algorithm. - std::vector min_value(att->num_components(), - std::numeric_limits::max()); - std::vector act_value(att->num_components()); - for (AttributeValueIndex avi(0); avi < static_cast(att->size()); - ++avi) { - att->ConvertValue(avi, &act_value[0]); - for (int c = 0; c < att->num_components(); ++c) { - if (min_value[c] > act_value[c]) { - min_value[c] = act_value[c]; - } - } - } - for (int c = 0; c < att->num_components(); ++c) { - min_signed_values_.push_back(min_value[c]); - } - } - } - return true; -} - -bool KdTreeAttributesEncoder::EncodeDataNeededByPortableTransforms( - EncoderBuffer *out_buffer) { - // Store quantization settings for all attributes that need it. - for (int i = 0; i < attribute_quantization_transforms_.size(); ++i) { - attribute_quantization_transforms_[i].EncodeParameters(out_buffer); - } - - // Encode data needed for transforming signed integers to unsigned ones. - for (int i = 0; i < min_signed_values_.size(); ++i) { - EncodeVarint(min_signed_values_[i], out_buffer); - } - return true; -} - -bool KdTreeAttributesEncoder::EncodePortableAttributes( - EncoderBuffer *out_buffer) { - // Encode the data using the kd tree encoder algorithm. The data is first - // copied to a PointDVector that provides all the API expected by the core - // encoding algorithm. - - // We limit the maximum value of compression_level to 6 as we don't currently - // have viable algorithms for higher compression levels. - uint8_t compression_level = - std::min(10 - encoder()->options()->GetSpeed(), 6); - DRACO_DCHECK_LE(compression_level, 6); - - if (compression_level == 6 && num_components_ > 15) { - // Don't use compression level for CL >= 6. Axis selection is currently - // encoded using 4 bits. - compression_level = 5; - } - - out_buffer->Encode(compression_level); - - // Init PointDVector. The number of dimensions is equal to the total number - // of dimensions across all attributes. - const int num_points = encoder()->point_cloud()->num_points(); - PointDVector point_vector(num_points, num_components_); - - int num_processed_components = 0; - int num_processed_quantized_attributes = 0; - int num_processed_signed_components = 0; - // Copy data to the point vector. - for (uint32_t i = 0; i < num_attributes(); ++i) { - const int att_id = GetAttributeId(i); - const PointAttribute *const att = - encoder()->point_cloud()->attribute(att_id); - const PointAttribute *source_att = nullptr; - if (att->data_type() == DT_UINT32 || att->data_type() == DT_UINT16 || - att->data_type() == DT_UINT8 || att->data_type() == DT_INT32 || - att->data_type() == DT_INT16 || att->data_type() == DT_INT8) { - // Use the original attribute. - source_att = att; - } else if (att->data_type() == DT_FLOAT32) { - // Use the portable (quantized) attribute instead. - source_att = - quantized_portable_attributes_[num_processed_quantized_attributes] - .get(); - num_processed_quantized_attributes++; - } else { - // Unsupported data type. - return false; - } - - if (source_att == nullptr) { - return false; - } - - // Copy source_att to the vector. - if (source_att->data_type() == DT_UINT32) { - // If the data type is the same as the one used by the point vector, we - // can directly copy individual elements. - for (PointIndex pi(0); pi < num_points; ++pi) { - const AttributeValueIndex avi = source_att->mapped_index(pi); - const uint8_t *const att_value_address = source_att->GetAddress(avi); - point_vector.CopyAttribute(source_att->num_components(), - num_processed_components, pi.value(), - att_value_address); - } - } else if (source_att->data_type() == DT_INT32 || - source_att->data_type() == DT_INT16 || - source_att->data_type() == DT_INT8) { - // Signed values need to be converted to unsigned before they are stored - // in the point vector. - std::vector signed_point(source_att->num_components()); - std::vector unsigned_point(source_att->num_components()); - for (PointIndex pi(0); pi < num_points; ++pi) { - const AttributeValueIndex avi = source_att->mapped_index(pi); - source_att->ConvertValue(avi, &signed_point[0]); - for (int c = 0; c < source_att->num_components(); ++c) { - unsigned_point[c] = - signed_point[c] - - min_signed_values_[num_processed_signed_components + c]; - } - - point_vector.CopyAttribute(source_att->num_components(), - num_processed_components, pi.value(), - &unsigned_point[0]); - } - num_processed_signed_components += source_att->num_components(); - } else { - // If the data type of the attribute is different, we have to convert the - // value before we put it to the point vector. - std::vector point(source_att->num_components()); - for (PointIndex pi(0); pi < num_points; ++pi) { - const AttributeValueIndex avi = source_att->mapped_index(pi); - source_att->ConvertValue(avi, &point[0]); - point_vector.CopyAttribute(source_att->num_components(), - num_processed_components, pi.value(), - point.data()); - } - } - num_processed_components += source_att->num_components(); - } - - // Compute the maximum bit length needed for the kd tree encoding. - int num_bits = 0; - const uint32_t *data = point_vector[0]; - for (int i = 0; i < num_points * num_components_; ++i) { - if (data[i] > 0) { - const int msb = MostSignificantBit(data[i]) + 1; - if (msb > num_bits) { - num_bits = msb; - } - } - } - - switch (compression_level) { - case 6: { - DynamicIntegerPointsKdTreeEncoder<6> points_encoder(num_components_); - if (!points_encoder.EncodePoints(point_vector.begin(), point_vector.end(), - num_bits, out_buffer)) { - return false; - } - break; - } - case 5: { - DynamicIntegerPointsKdTreeEncoder<5> points_encoder(num_components_); - if (!points_encoder.EncodePoints(point_vector.begin(), point_vector.end(), - num_bits, out_buffer)) { - return false; - } - break; - } - case 4: { - DynamicIntegerPointsKdTreeEncoder<4> points_encoder(num_components_); - if (!points_encoder.EncodePoints(point_vector.begin(), point_vector.end(), - num_bits, out_buffer)) { - return false; - } - break; - } - case 3: { - DynamicIntegerPointsKdTreeEncoder<3> points_encoder(num_components_); - if (!points_encoder.EncodePoints(point_vector.begin(), point_vector.end(), - num_bits, out_buffer)) { - return false; - } - break; - } - case 2: { - DynamicIntegerPointsKdTreeEncoder<2> points_encoder(num_components_); - if (!points_encoder.EncodePoints(point_vector.begin(), point_vector.end(), - num_bits, out_buffer)) { - return false; - } - break; - } - case 1: { - DynamicIntegerPointsKdTreeEncoder<1> points_encoder(num_components_); - if (!points_encoder.EncodePoints(point_vector.begin(), point_vector.end(), - num_bits, out_buffer)) { - return false; - } - break; - } - case 0: { - DynamicIntegerPointsKdTreeEncoder<0> points_encoder(num_components_); - if (!points_encoder.EncodePoints(point_vector.begin(), point_vector.end(), - num_bits, out_buffer)) { - return false; - } - break; - } - // Compression level and/or encoding speed seem wrong. - default: - return false; - } - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_encoder.h deleted file mode 100644 index 80748e0..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_encoder.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_ENCODER_H_ - -#include "draco/attributes/attribute_quantization_transform.h" -#include "draco/compression/attributes/attributes_encoder.h" -#include "draco/compression/config/compression_shared.h" - -namespace draco { - -// Encodes all attributes of a given PointCloud using one of the available -// Kd-tree compression methods. -// See compression/point_cloud/point_cloud_kd_tree_encoder.h for more details. -class KdTreeAttributesEncoder : public AttributesEncoder { - public: - KdTreeAttributesEncoder(); - explicit KdTreeAttributesEncoder(int att_id); - - uint8_t GetUniqueId() const override { return KD_TREE_ATTRIBUTE_ENCODER; } - - protected: - bool TransformAttributesToPortableFormat() override; - bool EncodePortableAttributes(EncoderBuffer *out_buffer) override; - bool EncodeDataNeededByPortableTransforms(EncoderBuffer *out_buffer) override; - - private: - std::vector - attribute_quantization_transforms_; - // Min signed values are used to transform signed integers into unsigned ones - // (by subtracting the min signed value for each component). - std::vector min_signed_values_; - std::vector> quantized_portable_attributes_; - int num_components_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_shared.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_shared.h deleted file mode 100644 index 94841a9..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/kd_tree_attributes_shared.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_SHARED_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_SHARED_H_ - -namespace draco { - -// Defines types of kD-tree compression -enum KdTreeAttributesEncodingMethod { - kKdTreeQuantizationEncoding = 0, - kKdTreeIntegerEncoding -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_KD_TREE_ATTRIBUTES_SHARED_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/linear_sequencer.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/linear_sequencer.h deleted file mode 100644 index 7d9b526..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/linear_sequencer.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_LINEAR_SEQUENCER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_LINEAR_SEQUENCER_H_ - -#include "draco/compression/attributes/points_sequencer.h" - -namespace draco { - -// A simple sequencer that generates a linear sequence [0, num_points - 1]. -// I.e., the order of the points is preserved for the input data. -class LinearSequencer : public PointsSequencer { - public: - explicit LinearSequencer(int32_t num_points) : num_points_(num_points) {} - - bool UpdatePointToAttributeIndexMapping(PointAttribute *attribute) override { - attribute->SetIdentityMapping(); - return true; - } - - protected: - bool GenerateSequenceInternal() override { - if (num_points_ < 0) { - return false; - } - out_point_ids()->resize(num_points_); - for (int i = 0; i < num_points_; ++i) { - out_point_ids()->at(i) = PointIndex(i); - } - return true; - } - - private: - int32_t num_points_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_LINEAR_SEQUENCER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/mesh_attribute_indices_encoding_data.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/mesh_attribute_indices_encoding_data.h deleted file mode 100644 index 9a358e4..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/mesh_attribute_indices_encoding_data.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_MESH_ATTRIBUTE_INDICES_ENCODING_DATA_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_MESH_ATTRIBUTE_INDICES_ENCODING_DATA_H_ - -#include - -#include - -#include "draco/attributes/geometry_indices.h" - -namespace draco { - -// Data used for encoding and decoding of mesh attributes. -struct MeshAttributeIndicesEncodingData { - MeshAttributeIndicesEncodingData() : num_values(0) {} - - void Init(int num_vertices) { - vertex_to_encoded_attribute_value_index_map.resize(num_vertices); - - // We expect to store one value for each vertex. - encoded_attribute_value_index_to_corner_map.reserve(num_vertices); - } - - // Array for storing the corner ids in the order their associated attribute - // entries were encoded/decoded. For every encoded attribute value entry we - // store exactly one corner. I.e., this is the mapping between an encoded - // attribute entry ids and corner ids. This map is needed for example by - // prediction schemes. Note that not all corners are included in this map, - // e.g., if multiple corners share the same attribute value, only one of these - // corners will be usually included. - std::vector encoded_attribute_value_index_to_corner_map; - - // Map for storing encoding order of attribute entries for each vertex. - // i.e. Mapping between vertices and their corresponding attribute entry ids - // that are going to be used by the decoder. - // -1 if an attribute entry hasn't been encoded/decoded yet. - std::vector vertex_to_encoded_attribute_value_index_map; - - // Total number of encoded/decoded attribute entries. - int num_values; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_MESH_ATTRIBUTE_INDICES_ENCODING_DATA_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/normal_compression_utils.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/normal_compression_utils.h deleted file mode 100644 index 8a6f25b..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/normal_compression_utils.h +++ /dev/null @@ -1,360 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Utilities for converting unit vectors to octahedral coordinates and back. -// For more details about octahedral coordinates, see for example Cigolle -// et al.'14 “A Survey of Efficient Representations for Independent Unit -// Vectors”. -// -// In short this is motivated by an octahedron inscribed into a sphere. The -// direction of the normal vector can be defined by a point on the octahedron. -// On the right hemisphere (x > 0) this point is projected onto the x = 0 plane, -// that is, the right side of the octahedron forms a diamond like shape. The -// left side of the octahedron is also projected onto the x = 0 plane, however, -// in this case we flap the triangles of the diamond outward. Afterwards we -// shift the resulting square such that all values are positive. -// -// Important values in this file: -// * q: number of quantization bits -// * max_quantized_value: the max value representable with q bits (odd) -// * max_value: max value of the diamond = max_quantized_value - 1 (even) -// * center_value: center of the diamond after shift -// -// Note that the parameter space is somewhat periodic, e.g. (0, 0) == -// (max_value, max_value), which is also why the diamond is one smaller than the -// maximal representable value in order to have an odd range of values. - -#ifndef DRACO_COMPRESSION_ATTRIBUTES_NORMAL_COMPRESSION_UTILS_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_NORMAL_COMPRESSION_UTILS_H_ - -#include - -#include -#include - -#include "draco/core/macros.h" - -namespace draco { - -class OctahedronToolBox { - public: - OctahedronToolBox() - : quantization_bits_(-1), - max_quantized_value_(-1), - max_value_(-1), - dequantization_scale_(1.f), - center_value_(-1) {} - - bool SetQuantizationBits(int32_t q) { - if (q < 2 || q > 30) { - return false; - } - quantization_bits_ = q; - max_quantized_value_ = (1 << quantization_bits_) - 1; - max_value_ = max_quantized_value_ - 1; - dequantization_scale_ = 2.f / max_value_; - center_value_ = max_value_ / 2; - return true; - } - bool IsInitialized() const { return quantization_bits_ != -1; } - - // Convert all edge points in the top left and bottom right quadrants to - // their corresponding position in the bottom left and top right quadrants. - // Convert all corner edge points to the top right corner. - inline void CanonicalizeOctahedralCoords(int32_t s, int32_t t, int32_t *out_s, - int32_t *out_t) const { - if ((s == 0 && t == 0) || (s == 0 && t == max_value_) || - (s == max_value_ && t == 0)) { - s = max_value_; - t = max_value_; - } else if (s == 0 && t > center_value_) { - t = center_value_ - (t - center_value_); - } else if (s == max_value_ && t < center_value_) { - t = center_value_ + (center_value_ - t); - } else if (t == max_value_ && s < center_value_) { - s = center_value_ + (center_value_ - s); - } else if (t == 0 && s > center_value_) { - s = center_value_ - (s - center_value_); - } - - *out_s = s; - *out_t = t; - } - - // Converts an integer vector to octahedral coordinates. - // Precondition: |int_vec| abs sum must equal center value. - inline void IntegerVectorToQuantizedOctahedralCoords(const int32_t *int_vec, - int32_t *out_s, - int32_t *out_t) const { - DRACO_DCHECK_EQ( - std::abs(int_vec[0]) + std::abs(int_vec[1]) + std::abs(int_vec[2]), - center_value_); - int32_t s, t; - if (int_vec[0] >= 0) { - // Right hemisphere. - s = (int_vec[1] + center_value_); - t = (int_vec[2] + center_value_); - } else { - // Left hemisphere. - if (int_vec[1] < 0) { - s = std::abs(int_vec[2]); - } else { - s = (max_value_ - std::abs(int_vec[2])); - } - if (int_vec[2] < 0) { - t = std::abs(int_vec[1]); - } else { - t = (max_value_ - std::abs(int_vec[1])); - } - } - CanonicalizeOctahedralCoords(s, t, out_s, out_t); - } - - template - void FloatVectorToQuantizedOctahedralCoords(const T *vector, int32_t *out_s, - int32_t *out_t) const { - const double abs_sum = std::abs(static_cast(vector[0])) + - std::abs(static_cast(vector[1])) + - std::abs(static_cast(vector[2])); - - // Adjust values such that abs sum equals 1. - double scaled_vector[3]; - if (abs_sum > 1e-6) { - // Scale needed to project the vector to the surface of an octahedron. - const double scale = 1.0 / abs_sum; - scaled_vector[0] = vector[0] * scale; - scaled_vector[1] = vector[1] * scale; - scaled_vector[2] = vector[2] * scale; - } else { - scaled_vector[0] = 1.0; - scaled_vector[1] = 0; - scaled_vector[2] = 0; - } - - // Scale vector such that the sum equals the center value. - int32_t int_vec[3]; - int_vec[0] = - static_cast(floor(scaled_vector[0] * center_value_ + 0.5)); - int_vec[1] = - static_cast(floor(scaled_vector[1] * center_value_ + 0.5)); - // Make sure the sum is exactly the center value. - int_vec[2] = center_value_ - std::abs(int_vec[0]) - std::abs(int_vec[1]); - if (int_vec[2] < 0) { - // If the sum of first two coordinates is too large, we need to decrease - // the length of one of the coordinates. - if (int_vec[1] > 0) { - int_vec[1] += int_vec[2]; - } else { - int_vec[1] -= int_vec[2]; - } - int_vec[2] = 0; - } - // Take care of the sign. - if (scaled_vector[2] < 0) { - int_vec[2] *= -1; - } - - IntegerVectorToQuantizedOctahedralCoords(int_vec, out_s, out_t); - } - - // Normalize |vec| such that its abs sum is equal to the center value; - template - void CanonicalizeIntegerVector(T *vec) const { - static_assert(std::is_integral::value, "T must be an integral type."); - static_assert(std::is_signed::value, "T must be a signed type."); - const int64_t abs_sum = static_cast(std::abs(vec[0])) + - static_cast(std::abs(vec[1])) + - static_cast(std::abs(vec[2])); - - if (abs_sum == 0) { - vec[0] = center_value_; // vec[1] == v[2] == 0 - } else { - vec[0] = - (static_cast(vec[0]) * static_cast(center_value_)) / - abs_sum; - vec[1] = - (static_cast(vec[1]) * static_cast(center_value_)) / - abs_sum; - if (vec[2] >= 0) { - vec[2] = center_value_ - std::abs(vec[0]) - std::abs(vec[1]); - } else { - vec[2] = -(center_value_ - std::abs(vec[0]) - std::abs(vec[1])); - } - } - } - - inline void QuantizedOctahedralCoordsToUnitVector(int32_t in_s, int32_t in_t, - float *out_vector) const { - OctahedralCoordsToUnitVector(in_s * dequantization_scale_ - 1.f, - in_t * dequantization_scale_ - 1.f, - out_vector); - } - - // |s| and |t| are expected to be signed values. - inline bool IsInDiamond(const int32_t &s, const int32_t &t) const { - // Expect center already at origin. - DRACO_DCHECK_LE(s, center_value_); - DRACO_DCHECK_LE(t, center_value_); - DRACO_DCHECK_GE(s, -center_value_); - DRACO_DCHECK_GE(t, -center_value_); - return std::abs(s) + std::abs(t) <= center_value_; - } - - void InvertDiamond(int32_t *s, int32_t *t) const { - // Expect center already at origin. - DRACO_DCHECK_LE(*s, center_value_); - DRACO_DCHECK_LE(*t, center_value_); - DRACO_DCHECK_GE(*s, -center_value_); - DRACO_DCHECK_GE(*t, -center_value_); - int32_t sign_s = 0; - int32_t sign_t = 0; - if (*s >= 0 && *t >= 0) { - sign_s = 1; - sign_t = 1; - } else if (*s <= 0 && *t <= 0) { - sign_s = -1; - sign_t = -1; - } else { - sign_s = (*s > 0) ? 1 : -1; - sign_t = (*t > 0) ? 1 : -1; - } - - const int32_t corner_point_s = sign_s * center_value_; - const int32_t corner_point_t = sign_t * center_value_; - *s = 2 * *s - corner_point_s; - *t = 2 * *t - corner_point_t; - if (sign_s * sign_t >= 0) { - int32_t temp = *s; - *s = -*t; - *t = -temp; - } else { - std::swap(*s, *t); - } - *s = (*s + corner_point_s) / 2; - *t = (*t + corner_point_t) / 2; - } - - void InvertDirection(int32_t *s, int32_t *t) const { - // Expect center already at origin. - DRACO_DCHECK_LE(*s, center_value_); - DRACO_DCHECK_LE(*t, center_value_); - DRACO_DCHECK_GE(*s, -center_value_); - DRACO_DCHECK_GE(*t, -center_value_); - *s *= -1; - *t *= -1; - this->InvertDiamond(s, t); - } - - // For correction values. - int32_t ModMax(int32_t x) const { - if (x > this->center_value()) { - return x - this->max_quantized_value(); - } - if (x < -this->center_value()) { - return x + this->max_quantized_value(); - } - return x; - } - - // For correction values. - int32_t MakePositive(int32_t x) const { - DRACO_DCHECK_LE(x, this->center_value() * 2); - if (x < 0) { - return x + this->max_quantized_value(); - } - return x; - } - - int32_t quantization_bits() const { return quantization_bits_; } - int32_t max_quantized_value() const { return max_quantized_value_; } - int32_t max_value() const { return max_value_; } - int32_t center_value() const { return center_value_; } - - private: - inline void OctahedralCoordsToUnitVector(float in_s_scaled, float in_t_scaled, - float *out_vector) const { - // Background about the encoding: - // A normal is encoded in a normalized space depicted below. The - // encoding correponds to an octahedron that is unwrapped to a 2D plane. - // During encoding, a normal is projected to the surface of the octahedron - // and the projection is then unwrapped to the 2D plane. Decoding is the - // reverse of this process. - // All points in the central diamond are located on triangles on the - // right "hemisphere" of the octahedron while all points outside of the - // diamond are on the left hemisphere (basically, they would have to be - // wrapped along the diagonal edges to form the octahedron). The central - // point corresponds to the right most vertex of the octahedron and all - // corners of the plane correspond to the left most vertex of the - // octahedron. - // - // t - // ^ *-----*-----* - // | | /|\ | - // | / | \ | - // | / | \ | - // | / | \ | - // *-----*---- * - // | \ | / | - // | \ | / | - // | \ | / | - // | \|/ | - // *-----*-----* --> s - - // Note that the input |in_s_scaled| and |in_t_scaled| are already scaled to - // <-1, 1> range. This way, the central point is at coordinate (0, 0). - float y = in_s_scaled; - float z = in_t_scaled; - - // Remaining coordinate can be computed by projecting the (y, z) values onto - // the surface of the octahedron. - const float x = 1.f - abs(y) - abs(z); - - // |x| is essentially a signed distance from the diagonal edges of the - // diamond shown on the figure above. It is positive for all points in the - // diamond (right hemisphere) and negative for all points outside the - // diamond (left hemisphere). For all points on the left hemisphere we need - // to update their (y, z) coordinates to account for the wrapping along - // the edges of the diamond. - float x_offset = -x; - x_offset = x_offset < 0 ? 0 : x_offset; - - // This will do nothing for the points on the right hemisphere but it will - // mirror the (y, z) location along the nearest diagonal edge of the - // diamond. - y += y < 0 ? x_offset : -x_offset; - z += z < 0 ? x_offset : -x_offset; - - // Normalize the computed vector. - const float norm_squared = x * x + y * y + z * z; - if (norm_squared < 1e-6) { - out_vector[0] = 0; - out_vector[1] = 0; - out_vector[2] = 0; - } else { - const float d = 1.0f / std::sqrt(norm_squared); - out_vector[0] = x * d; - out_vector[1] = y * d; - out_vector[2] = z * d; - } - } - - int32_t quantization_bits_; - int32_t max_quantized_value_; - int32_t max_value_; - float dequantization_scale_; - int32_t center_value_; -}; -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_NORMAL_COMPRESSION_UTILS_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/point_d_vector.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/point_d_vector.h deleted file mode 100644 index 3b115d5..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/point_d_vector.h +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2018 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef DRACO_COMPRESSION_ATTRIBUTES_POINT_D_VECTOR_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_POINT_D_VECTOR_H_ - -#include -#include -#include - -#include "draco/core/macros.h" - -namespace draco { - -// The main class of this file is PointDVector providing an interface similar to -// std::vector for arbitrary number of dimensions (without a template -// argument). PointDVectorIterator is a random access iterator, which allows for -// compatibility with existing algorithms. PseudoPointD provides for a view on -// the individual items in a contiguous block of memory, which is compatible -// with the swap function and is returned by a dereference of -// PointDVectorIterator. Swap functions provide for compatibility/specialization -// that allows these classes to work with currently utilized STL functions. - -// This class allows for swap functionality from the RandomIterator -// It seems problematic to bring this inside PointDVector due to templating. -template -class PseudoPointD { - public: - PseudoPointD(internal_t *mem, internal_t dimension) - : mem_(mem), dimension_(dimension) {} - - // Specifically copies referenced memory - void swap(PseudoPointD &other) noexcept { - for (internal_t dim = 0; dim < dimension_; dim += 1) { - std::swap(mem_[dim], other.mem_[dim]); - } - } - - PseudoPointD(const PseudoPointD &other) - : mem_(other.mem_), dimension_(other.dimension_) {} - - const internal_t &operator[](const size_t &n) const { - DRACO_DCHECK_LT(n, dimension_); - return mem_[n]; - } - internal_t &operator[](const size_t &n) { - DRACO_DCHECK_LT(n, dimension_); - return mem_[n]; - } - - bool operator==(const PseudoPointD &other) const { - for (auto dim = 0; dim < dimension_; dim += 1) { - if (mem_[dim] != other.mem_[dim]) { - return false; - } - } - return true; - } - bool operator!=(const PseudoPointD &other) const { - return !this->operator==(other); - } - - private: - internal_t *const mem_; - const internal_t dimension_; -}; - -// It seems problematic to bring this inside PointDVector due to templating. -template -void swap(draco::PseudoPointD &&a, - draco::PseudoPointD &&b) noexcept { - a.swap(b); -}; -template -void swap(draco::PseudoPointD &a, - draco::PseudoPointD &b) noexcept { - a.swap(b); -}; - -template -class PointDVector { - public: - PointDVector(const uint32_t n_items, const uint32_t dimensionality) - : n_items_(n_items), - dimensionality_(dimensionality), - item_size_bytes_(dimensionality * sizeof(internal_t)), - data_(n_items * dimensionality), - data0_(data_.data()) {} - // random access iterator - class PointDVectorIterator - : public std::iterator { - friend class PointDVector; - - public: - // std::iter_swap is called inside of std::partition and needs this - // specialized support - PseudoPointD operator*() const { - return PseudoPointD(vec_->data0_ + item_ * dimensionality_, - dimensionality_); - } - const PointDVectorIterator &operator++() { - item_ += 1; - return *this; - } - const PointDVectorIterator &operator--() { - item_ -= 1; - return *this; - } - PointDVectorIterator operator++(int32_t) { - PointDVectorIterator copy(*this); - item_ += 1; - return copy; - } - PointDVectorIterator operator--(int32_t) { - PointDVectorIterator copy(*this); - item_ -= 1; - return copy; - } - PointDVectorIterator &operator=(const PointDVectorIterator &other) { - this->item_ = other.item_; - return *this; - } - - bool operator==(const PointDVectorIterator &ref) const { - return item_ == ref.item_; - } - bool operator!=(const PointDVectorIterator &ref) const { - return item_ != ref.item_; - } - bool operator<(const PointDVectorIterator &ref) const { - return item_ < ref.item_; - } - bool operator>(const PointDVectorIterator &ref) const { - return item_ > ref.item_; - } - bool operator<=(const PointDVectorIterator &ref) const { - return item_ <= ref.item_; - } - bool operator>=(const PointDVectorIterator &ref) const { - return item_ >= ref.item_; - } - - PointDVectorIterator operator+(const int32_t &add) const { - PointDVectorIterator copy(vec_, item_ + add); - return copy; - } - PointDVectorIterator &operator+=(const int32_t &add) { - item_ += add; - return *this; - } - PointDVectorIterator operator-(const int32_t &sub) const { - PointDVectorIterator copy(vec_, item_ - sub); - return copy; - } - size_t operator-(const PointDVectorIterator &sub) const { - return (item_ - sub.item_); - } - - PointDVectorIterator &operator-=(const int32_t &sub) { - item_ -= sub; - return *this; - } - - internal_t *operator[](const size_t &n) const { - return vec_->data0_ + (item_ + n) * dimensionality_; - } - - protected: - explicit PointDVectorIterator(PointDVector *vec, size_t start_item) - : item_(start_item), vec_(vec), dimensionality_(vec->dimensionality_) {} - - private: - size_t item_; // this counts the item that should be referenced. - PointDVector *const vec_; // the thing that we're iterating on - const uint32_t dimensionality_; // local copy from vec_ - }; - - PointDVectorIterator begin() { return PointDVectorIterator(this, 0); } - PointDVectorIterator end() { return PointDVectorIterator(this, n_items_); } - - // operator[] allows for unprotected user-side usage of operator[] on the - // return value AS IF it were a natively indexable type like Point3* - internal_t *operator[](const uint32_t index) { - DRACO_DCHECK_LT(index, n_items_); - return data0_ + index * dimensionality_; - } - const internal_t *operator[](const uint32_t index) const { - DRACO_DCHECK_LT(index, n_items_); - return data0_ + index * dimensionality_; - } - - uint32_t size() const { return n_items_; } - size_t GetBufferSize() const { return data_.size(); } - - // copy a single contiguous 'item' from one PointDVector into this one. - void CopyItem(const PointDVector &source, const internal_t source_index, - const internal_t destination_index) { - DRACO_DCHECK(&source != this || - (&source == this && source_index != destination_index)); - DRACO_DCHECK_LT(destination_index, n_items_); - DRACO_DCHECK_LT(source_index, source.n_items_); - - // DRACO_DCHECK_EQ(source.n_items_, n_items_); // not technically necessary - DRACO_DCHECK_EQ(source.dimensionality_, dimensionality_); - - const internal_t *ref = source[source_index]; - internal_t *const dest = this->operator[](destination_index); - std::memcpy(dest, ref, item_size_bytes_); - } - - // Copy data directly off of an attribute buffer interleaved into internal - // memory. - void CopyAttribute( - // The dimensionality of the attribute being integrated - const internal_t attribute_dimensionality, - // The offset in dimensions to insert this attribute. - const internal_t offset_dimensionality, const internal_t index, - // The direct pointer to the data - const void *const attribute_item_data) { - // chunk copy - const size_t copy_size = sizeof(internal_t) * attribute_dimensionality; - - // a multiply and add can be optimized away with an iterator - std::memcpy(data0_ + index * dimensionality_ + offset_dimensionality, - attribute_item_data, copy_size); - } - // Copy data off of a contiguous buffer interleaved into internal memory - void CopyAttribute( - // The dimensionality of the attribute being integrated - const internal_t attribute_dimensionality, - // The offset in dimensions to insert this attribute. - const internal_t offset_dimensionality, - const internal_t *const attribute_mem) { - DRACO_DCHECK_LT(offset_dimensionality, - dimensionality_ - attribute_dimensionality); - // degenerate case block copy the whole buffer. - if (dimensionality_ == attribute_dimensionality) { - DRACO_DCHECK_EQ(offset_dimensionality, 0); - const size_t copy_size = - sizeof(internal_t) * attribute_dimensionality * n_items_; - std::memcpy(data0_, attribute_mem, copy_size); - } else { // chunk copy - const size_t copy_size = sizeof(internal_t) * attribute_dimensionality; - internal_t *internal_data; - const internal_t *attribute_data; - internal_t item; - for (internal_data = data0_ + offset_dimensionality, - attribute_data = attribute_mem, item = 0; - item < n_items_; internal_data += dimensionality_, - attribute_data += attribute_dimensionality, item += 1) { - std::memcpy(internal_data, attribute_data, copy_size); - } - } - } - - private: - // internal parameters. - const uint32_t n_items_; - const uint32_t dimensionality_; // The dimension of the points in the buffer - const uint32_t item_size_bytes_; - std::vector data_; // contiguously stored data. Never resized. - internal_t *const data0_; // raw pointer to base data. -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_POINT_D_VECTOR_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/point_d_vector_test.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/point_d_vector_test.cc deleted file mode 100644 index 59f28f8..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/point_d_vector_test.cc +++ /dev/null @@ -1,360 +0,0 @@ -// Copyright 2018 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/point_d_vector.h" - -#include "draco/compression/point_cloud/algorithms/point_cloud_types.h" -#include "draco/core/draco_test_base.h" - -namespace draco { - -class PointDVectorTest : public ::testing::Test { - protected: - template - void TestIntegrity() {} - template - void TestSize() { - for (uint32_t n_items = 0; n_items <= 10; ++n_items) { - for (uint32_t dimensionality = 1; dimensionality <= 10; - ++dimensionality) { - draco::PointDVector var(n_items, dimensionality); - ASSERT_EQ(n_items, var.size()); - ASSERT_EQ(n_items * dimensionality, var.GetBufferSize()); - } - } - } - template - void TestContentsContiguous() { - for (uint32_t n_items = 1; n_items <= 1000; n_items *= 10) { - for (uint32_t dimensionality = 1; dimensionality < 10; - dimensionality += 2) { - for (uint32_t att_dimensionality = 1; - att_dimensionality <= dimensionality; att_dimensionality += 2) { - for (uint32_t offset_dimensionality = 0; - offset_dimensionality < dimensionality - att_dimensionality; - ++offset_dimensionality) { - PointDVector var(n_items, dimensionality); - - std::vector att(n_items * att_dimensionality); - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - att[val * att_dimensionality + att_dim] = val; - } - } - const PT *const attribute_data = att.data(); - - var.CopyAttribute(att_dimensionality, offset_dimensionality, - attribute_data); - - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - ASSERT_EQ(var[val][offset_dimensionality + att_dim], val); - } - } - } - } - } - } - } - template - void TestContentsDiscrete() { - for (uint32_t n_items = 1; n_items <= 1000; n_items *= 10) { - for (uint32_t dimensionality = 1; dimensionality < 10; - dimensionality += 2) { - for (uint32_t att_dimensionality = 1; - att_dimensionality <= dimensionality; att_dimensionality += 2) { - for (uint32_t offset_dimensionality = 0; - offset_dimensionality < dimensionality - att_dimensionality; - ++offset_dimensionality) { - PointDVector var(n_items, dimensionality); - - std::vector att(n_items * att_dimensionality); - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - att[val * att_dimensionality + att_dim] = val; - } - } - const PT *const attribute_data = att.data(); - - for (PT item = 0; item < n_items; item += 1) { - var.CopyAttribute(att_dimensionality, offset_dimensionality, item, - attribute_data + item * att_dimensionality); - } - - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - ASSERT_EQ(var[val][offset_dimensionality + att_dim], val); - } - } - } - } - } - } - } - - template - void TestContentsCopy() { - for (uint32_t n_items = 1; n_items <= 1000; n_items *= 10) { - for (uint32_t dimensionality = 1; dimensionality < 10; - dimensionality += 2) { - for (uint32_t att_dimensionality = 1; - att_dimensionality <= dimensionality; att_dimensionality += 2) { - for (uint32_t offset_dimensionality = 0; - offset_dimensionality < dimensionality - att_dimensionality; - ++offset_dimensionality) { - PointDVector var(n_items, dimensionality); - PointDVector dest(n_items, dimensionality); - - std::vector att(n_items * att_dimensionality); - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - att[val * att_dimensionality + att_dim] = val; - } - } - const PT *const attribute_data = att.data(); - - var.CopyAttribute(att_dimensionality, offset_dimensionality, - attribute_data); - - for (PT item = 0; item < n_items; item += 1) { - dest.CopyItem(var, item, item); - } - - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - ASSERT_EQ(var[val][offset_dimensionality + att_dim], val); - ASSERT_EQ(dest[val][offset_dimensionality + att_dim], val); - } - } - } - } - } - } - } - template - void TestIterator() { - for (uint32_t n_items = 1; n_items <= 1000; n_items *= 10) { - for (uint32_t dimensionality = 1; dimensionality < 10; - dimensionality += 2) { - for (uint32_t att_dimensionality = 1; - att_dimensionality <= dimensionality; att_dimensionality += 2) { - for (uint32_t offset_dimensionality = 0; - offset_dimensionality < dimensionality - att_dimensionality; - ++offset_dimensionality) { - PointDVector var(n_items, dimensionality); - PointDVector dest(n_items, dimensionality); - - std::vector att(n_items * att_dimensionality); - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - att[val * att_dimensionality + att_dim] = val; - } - } - const PT *const attribute_data = att.data(); - - var.CopyAttribute(att_dimensionality, offset_dimensionality, - attribute_data); - - for (PT item = 0; item < n_items; item += 1) { - dest.CopyItem(var, item, item); - } - - auto V0 = var.begin(); - auto VE = var.end(); - auto D0 = dest.begin(); - auto DE = dest.end(); - - while (V0 != VE && D0 != DE) { - ASSERT_EQ(*D0, *V0); // compare PseudoPointD - // verify elemental values - for (auto index = 0; index < dimensionality; index += 1) { - ASSERT_EQ((*D0)[index], (*V0)[index]); - } - ++V0; - ++D0; - } - - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - ASSERT_EQ(var[val][offset_dimensionality + att_dim], val); - ASSERT_EQ(dest[val][offset_dimensionality + att_dim], val); - } - } - } - } - } - } - } - template - void TestPoint3Iterator() { - for (uint32_t n_items = 1; n_items <= 1000; n_items *= 10) { - const uint32_t dimensionality = 3; - // for (uint32_t dimensionality = 1; dimensionality < 10; - // dimensionality += 2) { - const uint32_t att_dimensionality = 3; - // for (uint32_t att_dimensionality = 1; - // att_dimensionality <= dimensionality; att_dimensionality += 2) { - for (uint32_t offset_dimensionality = 0; - offset_dimensionality < dimensionality - att_dimensionality; - ++offset_dimensionality) { - PointDVector var(n_items, dimensionality); - PointDVector dest(n_items, dimensionality); - - std::vector att(n_items * att_dimensionality); - std::vector att3(n_items); - for (PT val = 0; val < n_items; val += 1) { - att3[val][0] = val; - att3[val][1] = val; - att3[val][2] = val; - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - att[val * att_dimensionality + att_dim] = val; - } - } - const PT *const attribute_data = att.data(); - - var.CopyAttribute(att_dimensionality, offset_dimensionality, - attribute_data); - - for (PT item = 0; item < n_items; item += 1) { - dest.CopyItem(var, item, item); - } - - auto aV0 = att3.begin(); - auto aVE = att3.end(); - auto V0 = var.begin(); - auto VE = var.end(); - auto D0 = dest.begin(); - auto DE = dest.end(); - - while (aV0 != aVE && V0 != VE && D0 != DE) { - ASSERT_EQ(*D0, *V0); // compare PseudoPointD - // verify elemental values - for (auto index = 0; index < dimensionality; index += 1) { - ASSERT_EQ((*D0)[index], (*V0)[index]); - ASSERT_EQ((*D0)[index], (*aV0)[index]); - ASSERT_EQ((*aV0)[index], (*V0)[index]); - } - ++aV0; - ++V0; - ++D0; - } - - for (PT val = 0; val < n_items; val += 1) { - for (PT att_dim = 0; att_dim < att_dimensionality; att_dim += 1) { - ASSERT_EQ(var[val][offset_dimensionality + att_dim], val); - ASSERT_EQ(dest[val][offset_dimensionality + att_dim], val); - } - } - } - } - } - - void TestPseudoPointDSwap() { - draco::Point3ui val = {0, 1, 2}; - draco::Point3ui dest = {10, 11, 12}; - draco::PseudoPointD val_src1(&val[0], 3); - draco::PseudoPointD dest_src1(&dest[0], 3); - - ASSERT_EQ(val_src1[0], 0); - ASSERT_EQ(val_src1[1], 1); - ASSERT_EQ(val_src1[2], 2); - ASSERT_EQ(dest_src1[0], 10); - ASSERT_EQ(dest_src1[1], 11); - ASSERT_EQ(dest_src1[2], 12); - - ASSERT_NE(val_src1, dest_src1); - - swap(val_src1, dest_src1); - - ASSERT_EQ(dest_src1[0], 0); - ASSERT_EQ(dest_src1[1], 1); - ASSERT_EQ(dest_src1[2], 2); - ASSERT_EQ(val_src1[0], 10); - ASSERT_EQ(val_src1[1], 11); - ASSERT_EQ(val_src1[2], 12); - - ASSERT_NE(val_src1, dest_src1); - } - void TestPseudoPointDEquality() { - draco::Point3ui val = {0, 1, 2}; - draco::Point3ui dest = {0, 1, 2}; - draco::PseudoPointD val_src1(&val[0], 3); - draco::PseudoPointD val_src2(&val[0], 3); - draco::PseudoPointD dest_src1(&dest[0], 3); - draco::PseudoPointD dest_src2(&dest[0], 3); - - ASSERT_EQ(val_src1, val_src1); - ASSERT_EQ(val_src1, val_src2); - ASSERT_EQ(dest_src1, val_src1); - ASSERT_EQ(dest_src1, val_src2); - ASSERT_EQ(val_src2, val_src1); - ASSERT_EQ(val_src2, val_src2); - ASSERT_EQ(dest_src2, val_src1); - ASSERT_EQ(dest_src2, val_src2); - - for (auto i = 0; i < 3; i++) { - ASSERT_EQ(val_src1[i], val_src1[i]); - ASSERT_EQ(val_src1[i], val_src2[i]); - ASSERT_EQ(dest_src1[i], val_src1[i]); - ASSERT_EQ(dest_src1[i], val_src2[i]); - ASSERT_EQ(val_src2[i], val_src1[i]); - ASSERT_EQ(val_src2[i], val_src2[i]); - ASSERT_EQ(dest_src2[i], val_src1[i]); - ASSERT_EQ(dest_src2[i], val_src2[i]); - } - } - void TestPseudoPointDInequality() { - draco::Point3ui val = {0, 1, 2}; - draco::Point3ui dest = {1, 2, 3}; - draco::PseudoPointD val_src1(&val[0], 3); - draco::PseudoPointD val_src2(&val[0], 3); - draco::PseudoPointD dest_src1(&dest[0], 3); - draco::PseudoPointD dest_src2(&dest[0], 3); - - ASSERT_EQ(val_src1, val_src1); - ASSERT_EQ(val_src1, val_src2); - ASSERT_NE(dest_src1, val_src1); - ASSERT_NE(dest_src1, val_src2); - ASSERT_EQ(val_src2, val_src1); - ASSERT_EQ(val_src2, val_src2); - ASSERT_NE(dest_src2, val_src1); - ASSERT_NE(dest_src2, val_src2); - - for (auto i = 0; i < 3; i++) { - ASSERT_EQ(val_src1[i], val_src1[i]); - ASSERT_EQ(val_src1[i], val_src2[i]); - ASSERT_NE(dest_src1[i], val_src1[i]); - ASSERT_NE(dest_src1[i], val_src2[i]); - ASSERT_EQ(val_src2[i], val_src1[i]); - ASSERT_EQ(val_src2[i], val_src2[i]); - ASSERT_NE(dest_src2[i], val_src1[i]); - ASSERT_NE(dest_src2[i], val_src2[i]); - } - } -}; - -TEST_F(PointDVectorTest, VectorTest) { - TestSize(); - TestContentsDiscrete(); - TestContentsContiguous(); - TestContentsCopy(); - TestIterator(); - TestPoint3Iterator(); -} -TEST_F(PointDVectorTest, PseudoPointDTest) { - TestPseudoPointDSwap(); - TestPseudoPointDEquality(); - TestPseudoPointDInequality(); -} -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/points_sequencer.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/points_sequencer.h deleted file mode 100644 index 2f4f7e1..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/points_sequencer.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_POINTS_SEQUENCER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_POINTS_SEQUENCER_H_ - -#include - -#include "draco/attributes/point_attribute.h" - -namespace draco { - -// Class for generating a sequence of point ids that can be used to encode -// or decode attribute values in a specific order. -// See sequential_attribute_encoders/decoders_controller.h for more details. -class PointsSequencer { - public: - PointsSequencer() : out_point_ids_(nullptr) {} - virtual ~PointsSequencer() = default; - - // Fills the |out_point_ids| with the generated sequence of point ids. - bool GenerateSequence(std::vector *out_point_ids) { - out_point_ids_ = out_point_ids; - return GenerateSequenceInternal(); - } - - // Appends a point to the sequence. - void AddPointId(PointIndex point_id) { out_point_ids_->push_back(point_id); } - - // Sets the correct mapping between point ids and value ids. I.e., the inverse - // of the |out_point_ids|. In general, |out_point_ids_| does not contain - // sufficient information to compute the inverse map, because not all point - // ids are necessarily contained within the map. - // Must be implemented for sequencers that are used by attribute decoders. - virtual bool UpdatePointToAttributeIndexMapping(PointAttribute * /* attr */) { - return false; - } - - protected: - // Method that needs to be implemented by the derived classes. The - // implementation is responsible for filling |out_point_ids_| with the valid - // sequence of point ids. - virtual bool GenerateSequenceInternal() = 0; - std::vector *out_point_ids() const { return out_point_ids_; } - - private: - std::vector *out_point_ids_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_POINTS_SEQUENCER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h deleted file mode 100644 index 36c124b..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_DECODER_H_ - -#include -#include - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" -#include "draco/compression/bit_coders/rans_bit_decoder.h" -#include "draco/core/varint_decoding.h" -#include "draco/draco_features.h" - -namespace draco { - -// Decoder for predictions encoded with the constrained multi-parallelogram -// encoder. See the corresponding encoder for more details about the prediction -// method. -template -class MeshPredictionSchemeConstrainedMultiParallelogramDecoder - : public MeshPredictionSchemeDecoder { - public: - using CorrType = - typename PredictionSchemeDecoder::CorrType; - using CornerTable = typename MeshDataT::CornerTable; - - explicit MeshPredictionSchemeConstrainedMultiParallelogramDecoder( - const PointAttribute *attribute) - : MeshPredictionSchemeDecoder( - attribute), - selected_mode_(Mode::OPTIMAL_MULTI_PARALLELOGRAM) {} - MeshPredictionSchemeConstrainedMultiParallelogramDecoder( - const PointAttribute *attribute, const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeDecoder( - attribute, transform, mesh_data), - selected_mode_(Mode::OPTIMAL_MULTI_PARALLELOGRAM) {} - - bool ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int size, int num_components, - const PointIndex *entry_to_point_id_map) override; - - bool DecodePredictionData(DecoderBuffer *buffer) override; - - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM; - } - - bool IsInitialized() const override { - return this->mesh_data().IsInitialized(); - } - - private: - typedef constrained_multi_parallelogram::Mode Mode; - static constexpr int kMaxNumParallelograms = - constrained_multi_parallelogram::kMaxNumParallelograms; - // Crease edges are used to store whether any given edge should be used for - // parallelogram prediction or not. New values are added in the order in which - // the edges are processed. For better compression, the flags are stored in - // in separate contexts based on the number of available parallelograms at a - // given vertex. - std::vector is_crease_edge_[kMaxNumParallelograms]; - Mode selected_mode_; -}; - -template -bool MeshPredictionSchemeConstrainedMultiParallelogramDecoder< - DataTypeT, TransformT, MeshDataT>:: - ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int /* size */, int num_components, - const PointIndex * /* entry_to_point_id_map */) { - this->transform().Init(num_components); - - // Predicted values for all simple parallelograms encountered at any given - // vertex. - std::vector pred_vals[kMaxNumParallelograms]; - for (int i = 0; i < kMaxNumParallelograms; ++i) { - pred_vals[i].resize(num_components, 0); - } - this->transform().ComputeOriginalValue(pred_vals[0].data(), in_corr, - out_data); - - const CornerTable *const table = this->mesh_data().corner_table(); - const std::vector *const vertex_to_data_map = - this->mesh_data().vertex_to_data_map(); - - // Current position in the |is_crease_edge_| array for each context. - std::vector is_crease_edge_pos(kMaxNumParallelograms, 0); - - // Used to store predicted value for multi-parallelogram prediction. - std::vector multi_pred_vals(num_components); - - const int corner_map_size = - static_cast(this->mesh_data().data_to_corner_map()->size()); - for (int p = 1; p < corner_map_size; ++p) { - const CornerIndex start_corner_id = - this->mesh_data().data_to_corner_map()->at(p); - - CornerIndex corner_id(start_corner_id); - int num_parallelograms = 0; - bool first_pass = true; - while (corner_id != kInvalidCornerIndex) { - if (ComputeParallelogramPrediction( - p, corner_id, table, *vertex_to_data_map, out_data, - num_components, &(pred_vals[num_parallelograms][0]))) { - // Parallelogram prediction applied and stored in - // |pred_vals[num_parallelograms]| - ++num_parallelograms; - // Stop processing when we reach the maximum number of allowed - // parallelograms. - if (num_parallelograms == kMaxNumParallelograms) { - break; - } - } - - // Proceed to the next corner attached to the vertex. First swing left - // and if we reach a boundary, swing right from the start corner. - if (first_pass) { - corner_id = table->SwingLeft(corner_id); - } else { - corner_id = table->SwingRight(corner_id); - } - if (corner_id == start_corner_id) { - break; - } - if (corner_id == kInvalidCornerIndex && first_pass) { - first_pass = false; - corner_id = table->SwingRight(start_corner_id); - } - } - - // Check which of the available parallelograms are actually used and compute - // the final predicted value. - int num_used_parallelograms = 0; - if (num_parallelograms > 0) { - for (int i = 0; i < num_components; ++i) { - multi_pred_vals[i] = 0; - } - // Check which parallelograms are actually used. - for (int i = 0; i < num_parallelograms; ++i) { - const int context = num_parallelograms - 1; - const int pos = is_crease_edge_pos[context]++; - if (is_crease_edge_[context].size() <= pos) { - return false; - } - const bool is_crease = is_crease_edge_[context][pos]; - if (!is_crease) { - ++num_used_parallelograms; - for (int j = 0; j < num_components; ++j) { - multi_pred_vals[j] += pred_vals[i][j]; - } - } - } - } - const int dst_offset = p * num_components; - if (num_used_parallelograms == 0) { - // No parallelogram was valid. - // We use the last decoded point as a reference. - const int src_offset = (p - 1) * num_components; - this->transform().ComputeOriginalValue( - out_data + src_offset, in_corr + dst_offset, out_data + dst_offset); - } else { - // Compute the correction from the predicted value. - for (int c = 0; c < num_components; ++c) { - multi_pred_vals[c] /= num_used_parallelograms; - } - this->transform().ComputeOriginalValue( - multi_pred_vals.data(), in_corr + dst_offset, out_data + dst_offset); - } - } - return true; -} - -template -bool MeshPredictionSchemeConstrainedMultiParallelogramDecoder< - DataTypeT, TransformT, MeshDataT>::DecodePredictionData(DecoderBuffer - *buffer) { -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 2)) { - // Decode prediction mode. - uint8_t mode; - if (!buffer->Decode(&mode)) { - return false; - } - - if (mode != Mode::OPTIMAL_MULTI_PARALLELOGRAM) { - // Unsupported mode. - return false; - } - } -#endif - - // Encode selected edges using separate rans bit coder for each context. - for (int i = 0; i < kMaxNumParallelograms; ++i) { - uint32_t num_flags; - if (!DecodeVarint(&num_flags, buffer)) { - return false; - } - if (num_flags > 0) { - is_crease_edge_[i].resize(num_flags); - RAnsBitDecoder decoder; - if (!decoder.StartDecoding(buffer)) { - return false; - } - for (uint32_t j = 0; j < num_flags; ++j) { - is_crease_edge_[i][j] = decoder.DecodeNextBit(); - } - decoder.EndDecoding(); - } - } - return MeshPredictionSchemeDecoder::DecodePredictionData(buffer); -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h deleted file mode 100644 index 77df8ee..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h +++ /dev/null @@ -1,414 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_ENCODER_H_ - -#include -#include - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" -#include "draco/compression/bit_coders/rans_bit_encoder.h" -#include "draco/compression/entropy/shannon_entropy.h" -#include "draco/core/varint_encoding.h" - -namespace draco { - -// Compared to standard multi-parallelogram, constrained multi-parallelogram can -// explicitly select which of the available parallelograms are going to be used -// for the prediction by marking crease edges between two triangles. This -// requires storing extra data, but it allows the predictor to avoid using -// parallelograms that would lead to poor predictions. For improved efficiency, -// our current implementation limits the maximum number of used parallelograms -// to four, which covers >95% of the cases (on average, there are only two -// parallelograms available for any given vertex). -// All bits of the explicitly chosen configuration are stored together in a -// single context chosen by the total number of parallelograms available to -// choose from. -template -class MeshPredictionSchemeConstrainedMultiParallelogramEncoder - : public MeshPredictionSchemeEncoder { - public: - using CorrType = - typename PredictionSchemeEncoder::CorrType; - using CornerTable = typename MeshDataT::CornerTable; - - explicit MeshPredictionSchemeConstrainedMultiParallelogramEncoder( - const PointAttribute *attribute) - : MeshPredictionSchemeEncoder( - attribute), - selected_mode_(Mode::OPTIMAL_MULTI_PARALLELOGRAM) {} - MeshPredictionSchemeConstrainedMultiParallelogramEncoder( - const PointAttribute *attribute, const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeEncoder( - attribute, transform, mesh_data), - selected_mode_(Mode::OPTIMAL_MULTI_PARALLELOGRAM) {} - - bool ComputeCorrectionValues( - const DataTypeT *in_data, CorrType *out_corr, int size, - int num_components, const PointIndex *entry_to_point_id_map) override; - - bool EncodePredictionData(EncoderBuffer *buffer) override; - - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM; - } - - bool IsInitialized() const override { - return this->mesh_data().IsInitialized(); - } - - private: - // Function used to compute number of bits needed to store overhead of the - // predictor. In this case, we consider overhead to be all bits that mark - // whether a parallelogram should be used for prediction or not. The input - // to this method is the total number of parallelograms that were evaluated so - // far(total_parallelogram), and the number of parallelograms we decided to - // use for prediction (total_used_parallelograms). - // Returns number of bits required to store the overhead. - int64_t ComputeOverheadBits(int64_t total_used_parallelograms, - int64_t total_parallelogram) const { - // For now we assume RAns coding for the bits where the total required size - // is directly correlated to the binary entropy of the input stream. - // TODO(ostava): This should be generalized in case we use other binary - // coding scheme. - const double entropy = ComputeBinaryShannonEntropy( - static_cast(total_parallelogram), - static_cast(total_used_parallelograms)); - - // Round up to the nearest full bit. - return static_cast( - ceil(static_cast(total_parallelogram) * entropy)); - } - - // Struct that contains data used for measuring the error of each available - // parallelogram configuration. - struct Error { - Error() : num_bits(0), residual_error(0) {} - - // Primary metric: number of bits required to store the data as a result of - // the selected prediction configuration. - int num_bits; - // Secondary metric: absolute difference of residuals for the given - // configuration. - int residual_error; - - bool operator<(const Error &e) const { - if (num_bits < e.num_bits) { - return true; - } - if (num_bits > e.num_bits) { - return false; - } - return residual_error < e.residual_error; - } - }; - - // Computes error for predicting |predicted_val| instead of |actual_val|. - // Error is computed as the number of bits needed to encode the difference - // between the values. - Error ComputeError(const DataTypeT *predicted_val, - const DataTypeT *actual_val, int *out_residuals, - int num_components) { - Error error; - - for (int i = 0; i < num_components; ++i) { - const int dif = (predicted_val[i] - actual_val[i]); - error.residual_error += std::abs(dif); - out_residuals[i] = dif; - // Entropy needs unsigned symbols, so convert the signed difference to an - // unsigned symbol. - entropy_symbols_[i] = ConvertSignedIntToSymbol(dif); - } - - // Generate entropy data for case that this configuration was used. - // Note that the entropy stream is NOT updated in this case. - const auto entropy_data = - entropy_tracker_.Peek(entropy_symbols_.data(), num_components); - - error.num_bits = entropy_tracker_.GetNumberOfDataBits(entropy_data) + - entropy_tracker_.GetNumberOfRAnsTableBits(entropy_data); - return error; - } - - typedef constrained_multi_parallelogram::Mode Mode; - static constexpr int kMaxNumParallelograms = - constrained_multi_parallelogram::kMaxNumParallelograms; - // Crease edges are used to store whether any given edge should be used for - // parallelogram prediction or not. New values are added in the order in which - // the edges are processed. For better compression, the flags are stored in - // in separate contexts based on the number of available parallelograms at a - // given vertex. - // TODO(draco-eng) reconsider std::vector (performance/space). - std::vector is_crease_edge_[kMaxNumParallelograms]; - Mode selected_mode_; - - ShannonEntropyTracker entropy_tracker_; - - // Temporary storage for symbols that are fed into the |entropy_stream|. - // Always contains only |num_components| entries. - std::vector entropy_symbols_; -}; - -template -bool MeshPredictionSchemeConstrainedMultiParallelogramEncoder< - DataTypeT, TransformT, MeshDataT>:: - ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, - int size, int num_components, - const PointIndex * /* entry_to_point_id_map */) { - this->transform().Init(in_data, size, num_components); - const CornerTable *const table = this->mesh_data().corner_table(); - const std::vector *const vertex_to_data_map = - this->mesh_data().vertex_to_data_map(); - - // Predicted values for all simple parallelograms encountered at any given - // vertex. - std::vector pred_vals[kMaxNumParallelograms]; - for (int i = 0; i < kMaxNumParallelograms; ++i) { - pred_vals[i].resize(num_components); - } - // Used to store predicted value for various multi-parallelogram predictions - // (combinations of simple parallelogram predictions). - std::vector multi_pred_vals(num_components); - entropy_symbols_.resize(num_components); - - // Struct for holding data about prediction configuration for different sets - // of used parallelograms. - struct PredictionConfiguration { - PredictionConfiguration() - : error(), configuration(0), num_used_parallelograms(0) {} - Error error; - uint8_t configuration; // Bitfield, 1 use parallelogram, 0 don't use it. - int num_used_parallelograms; - std::vector predicted_value; - std::vector residuals; - }; - - // Bit-field used for computing permutations of excluded edges - // (parallelograms). - bool exluded_parallelograms[kMaxNumParallelograms]; - - // Data about the number of used parallelogram and total number of available - // parallelogram for each context. Used to compute overhead needed for storing - // the parallelogram choices made by the encoder. - int64_t total_used_parallelograms[kMaxNumParallelograms] = {0}; - int64_t total_parallelograms[kMaxNumParallelograms] = {0}; - - std::vector current_residuals(num_components); - - // We start processing the vertices from the end because this prediction uses - // data from previous entries that could be overwritten when an entry is - // processed. - for (int p = - static_cast(this->mesh_data().data_to_corner_map()->size()) - 1; - p > 0; --p) { - const CornerIndex start_corner_id = - this->mesh_data().data_to_corner_map()->at(p); - - // Go over all corners attached to the vertex and compute the predicted - // value from the parallelograms defined by their opposite faces. - CornerIndex corner_id(start_corner_id); - int num_parallelograms = 0; - bool first_pass = true; - while (corner_id != kInvalidCornerIndex) { - if (ComputeParallelogramPrediction( - p, corner_id, table, *vertex_to_data_map, in_data, num_components, - &(pred_vals[num_parallelograms][0]))) { - // Parallelogram prediction applied and stored in - // |pred_vals[num_parallelograms]| - ++num_parallelograms; - // Stop processing when we reach the maximum number of allowed - // parallelograms. - if (num_parallelograms == kMaxNumParallelograms) { - break; - } - } - - // Proceed to the next corner attached to the vertex. First swing left - // and if we reach a boundary, swing right from the start corner. - if (first_pass) { - corner_id = table->SwingLeft(corner_id); - } else { - corner_id = table->SwingRight(corner_id); - } - if (corner_id == start_corner_id) { - break; - } - if (corner_id == kInvalidCornerIndex && first_pass) { - first_pass = false; - corner_id = table->SwingRight(start_corner_id); - } - } - - // Offset to the target (destination) vertex. - const int dst_offset = p * num_components; - Error error; - - // Compute all prediction errors for all possible configurations of - // available parallelograms. - - // Variable for holding the best configuration that has been found so far. - PredictionConfiguration best_prediction; - - // Compute delta coding error (configuration when no parallelogram is - // selected). - const int src_offset = (p - 1) * num_components; - error = ComputeError(in_data + src_offset, in_data + dst_offset, - ¤t_residuals[0], num_components); - - if (num_parallelograms > 0) { - total_parallelograms[num_parallelograms - 1] += num_parallelograms; - const int64_t new_overhead_bits = - ComputeOverheadBits(total_used_parallelograms[num_parallelograms - 1], - total_parallelograms[num_parallelograms - 1]); - error.num_bits += new_overhead_bits; - } - - best_prediction.error = error; - best_prediction.configuration = 0; - best_prediction.num_used_parallelograms = 0; - best_prediction.predicted_value.assign( - in_data + src_offset, in_data + src_offset + num_components); - best_prediction.residuals.assign(current_residuals.begin(), - current_residuals.end()); - - // Compute prediction error for different cases of used parallelograms. - for (int num_used_parallelograms = 1; - num_used_parallelograms <= num_parallelograms; - ++num_used_parallelograms) { - // Mark all parallelograms as excluded. - std::fill(exluded_parallelograms, - exluded_parallelograms + num_parallelograms, true); - // TODO(draco-eng) maybe this should be another std::fill. - // Mark the first |num_used_parallelograms| as not excluded. - for (int j = 0; j < num_used_parallelograms; ++j) { - exluded_parallelograms[j] = false; - } - // Permute over the excluded edges and compute error for each - // configuration (permutation of excluded parallelograms). - do { - // Reset the multi-parallelogram predicted values. - for (int j = 0; j < num_components; ++j) { - multi_pred_vals[j] = 0; - } - uint8_t configuration = 0; - for (int j = 0; j < num_parallelograms; ++j) { - if (exluded_parallelograms[j]) { - continue; - } - for (int c = 0; c < num_components; ++c) { - multi_pred_vals[c] += pred_vals[j][c]; - } - // Set jth bit of the configuration. - configuration |= (1 << j); - } - - for (int j = 0; j < num_components; ++j) { - multi_pred_vals[j] /= num_used_parallelograms; - } - error = ComputeError(multi_pred_vals.data(), in_data + dst_offset, - ¤t_residuals[0], num_components); - if (num_parallelograms > 0) { - const int64_t new_overhead_bits = ComputeOverheadBits( - total_used_parallelograms[num_parallelograms - 1] + - num_used_parallelograms, - total_parallelograms[num_parallelograms - 1]); - - // Add overhead bits to the total error. - error.num_bits += new_overhead_bits; - } - if (error < best_prediction.error) { - best_prediction.error = error; - best_prediction.configuration = configuration; - best_prediction.num_used_parallelograms = num_used_parallelograms; - best_prediction.predicted_value.assign(multi_pred_vals.begin(), - multi_pred_vals.end()); - best_prediction.residuals.assign(current_residuals.begin(), - current_residuals.end()); - } - } while (std::next_permutation( - exluded_parallelograms, exluded_parallelograms + num_parallelograms)); - } - if (num_parallelograms > 0) { - total_used_parallelograms[num_parallelograms - 1] += - best_prediction.num_used_parallelograms; - } - - // Update the entropy stream by adding selected residuals as symbols to the - // stream. - for (int i = 0; i < num_components; ++i) { - entropy_symbols_[i] = - ConvertSignedIntToSymbol(best_prediction.residuals[i]); - } - entropy_tracker_.Push(entropy_symbols_.data(), num_components); - - for (int i = 0; i < num_parallelograms; ++i) { - if ((best_prediction.configuration & (1 << i)) == 0) { - // Parallelogram not used, mark the edge as crease. - is_crease_edge_[num_parallelograms - 1].push_back(true); - } else { - // Parallelogram used. Add it to the predicted value and mark the - // edge as not a crease. - is_crease_edge_[num_parallelograms - 1].push_back(false); - } - } - this->transform().ComputeCorrection(in_data + dst_offset, - best_prediction.predicted_value.data(), - out_corr + dst_offset); - } - // First element is always fixed because it cannot be predicted. - for (int i = 0; i < num_components; ++i) { - pred_vals[0][i] = static_cast(0); - } - this->transform().ComputeCorrection(in_data, pred_vals[0].data(), out_corr); - return true; -} - -template -bool MeshPredictionSchemeConstrainedMultiParallelogramEncoder< - DataTypeT, TransformT, MeshDataT>::EncodePredictionData(EncoderBuffer - *buffer) { - // Encode selected edges using separate rans bit coder for each context. - for (int i = 0; i < kMaxNumParallelograms; ++i) { - // |i| is the context based on the number of available parallelograms, which - // is always equal to |i + 1|. - const int num_used_parallelograms = i + 1; - EncodeVarint(is_crease_edge_[i].size(), buffer); - if (is_crease_edge_[i].size()) { - RAnsBitEncoder encoder; - encoder.StartEncoding(); - // Encode the crease edge flags in the reverse vertex order that is needed - // be the decoder. Note that for the currently supported mode, each vertex - // has exactly |num_used_parallelograms| edges that need to be encoded. - for (int j = static_cast(is_crease_edge_[i].size()) - - num_used_parallelograms; - j >= 0; j -= num_used_parallelograms) { - // Go over all edges of the current vertex. - for (int k = 0; k < num_used_parallelograms; ++k) { - encoder.EncodeBit(is_crease_edge_[i][j + k]); - } - } - encoder.EndEncoding(buffer); - } - } - return MeshPredictionSchemeEncoder::EncodePredictionData(buffer); -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h deleted file mode 100644 index c7a4e35..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_SHARED_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_SHARED_H_ - -namespace draco { - -// Data shared between constrained multi-parallelogram encoder and decoder. -namespace constrained_multi_parallelogram { - -enum Mode { - // Selects the optimal multi-parallelogram from up to 4 available - // parallelograms. - OPTIMAL_MULTI_PARALLELOGRAM = 0, -}; - -static constexpr int kMaxNumParallelograms = 4; - -} // namespace constrained_multi_parallelogram -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_CONSTRAINED_MULTI_PARALLELOGRAM_SHARED_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h deleted file mode 100644 index 2960a5e..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_DATA_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_DATA_H_ - -#include "draco/mesh/corner_table.h" -#include "draco/mesh/mesh.h" - -namespace draco { - -// Class stores data about the connectivity data of the mesh and information -// about how the connectivity was encoded/decoded. -template -class MeshPredictionSchemeData { - public: - typedef CornerTableT CornerTable; - MeshPredictionSchemeData() - : mesh_(nullptr), - corner_table_(nullptr), - vertex_to_data_map_(nullptr), - data_to_corner_map_(nullptr) {} - - void Set(const Mesh *mesh, const CornerTable *table, - const std::vector *data_to_corner_map, - const std::vector *vertex_to_data_map) { - mesh_ = mesh; - corner_table_ = table; - data_to_corner_map_ = data_to_corner_map; - vertex_to_data_map_ = vertex_to_data_map; - } - - const Mesh *mesh() const { return mesh_; } - const CornerTable *corner_table() const { return corner_table_; } - const std::vector *vertex_to_data_map() const { - return vertex_to_data_map_; - } - const std::vector *data_to_corner_map() const { - return data_to_corner_map_; - } - bool IsInitialized() const { - return mesh_ != nullptr && corner_table_ != nullptr && - vertex_to_data_map_ != nullptr && data_to_corner_map_ != nullptr; - } - - private: - const Mesh *mesh_; - const CornerTable *corner_table_; - - // Mapping between vertices and their encoding order. I.e. when an attribute - // entry on a given vertex was encoded. - const std::vector *vertex_to_data_map_; - - // Array that stores which corner was processed when a given attribute entry - // was encoded or decoded. - const std::vector *data_to_corner_map_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_DATA_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h deleted file mode 100644 index 6694a98..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_DECODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h" - -namespace draco { - -// Base class for all mesh prediction scheme decoders that use the mesh -// connectivity data. |MeshDataT| can be any class that provides the same -// interface as the PredictionSchemeMeshData class. -template -class MeshPredictionSchemeDecoder - : public PredictionSchemeDecoder { - public: - typedef MeshDataT MeshData; - MeshPredictionSchemeDecoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : PredictionSchemeDecoder(attribute, transform), - mesh_data_(mesh_data) {} - - protected: - const MeshData &mesh_data() const { return mesh_data_; } - - private: - MeshData mesh_data_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h deleted file mode 100644 index ab3c81a..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_ENCODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h" - -namespace draco { - -// Base class for all mesh prediction scheme encoders that use the mesh -// connectivity data. |MeshDataT| can be any class that provides the same -// interface as the PredictionSchemeMeshData class. -template -class MeshPredictionSchemeEncoder - : public PredictionSchemeEncoder { - public: - typedef MeshDataT MeshData; - MeshPredictionSchemeEncoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : PredictionSchemeEncoder(attribute, transform), - mesh_data_(mesh_data) {} - - protected: - const MeshData &mesh_data() const { return mesh_data_; } - - private: - MeshData mesh_data_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h deleted file mode 100644 index da1387a..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_DECODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h" -#include "draco/compression/bit_coders/rans_bit_decoder.h" -#include "draco/draco_features.h" - -namespace draco { - -// See MeshPredictionSchemeGeometricNormalEncoder for documentation. -template -class MeshPredictionSchemeGeometricNormalDecoder - : public MeshPredictionSchemeDecoder { - public: - using CorrType = typename MeshPredictionSchemeDecoder::CorrType; - MeshPredictionSchemeGeometricNormalDecoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeDecoder( - attribute, transform, mesh_data), - predictor_(mesh_data) {} - - private: - MeshPredictionSchemeGeometricNormalDecoder() {} - - public: - bool ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int size, int num_components, - const PointIndex *entry_to_point_id_map) override; - - bool DecodePredictionData(DecoderBuffer *buffer) override; - - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_GEOMETRIC_NORMAL; - } - - bool IsInitialized() const override { - if (!predictor_.IsInitialized()) { - return false; - } - if (!this->mesh_data().IsInitialized()) { - return false; - } - if (!octahedron_tool_box_.IsInitialized()) { - return false; - } - return true; - } - - int GetNumParentAttributes() const override { return 1; } - - GeometryAttribute::Type GetParentAttributeType(int i) const override { - DRACO_DCHECK_EQ(i, 0); - (void)i; - return GeometryAttribute::POSITION; - } - - bool SetParentAttribute(const PointAttribute *att) override { - if (att->attribute_type() != GeometryAttribute::POSITION) { - return false; // Invalid attribute type. - } - if (att->num_components() != 3) { - return false; // Currently works only for 3 component positions. - } - predictor_.SetPositionAttribute(*att); - return true; - } - void SetQuantizationBits(int q) { - octahedron_tool_box_.SetQuantizationBits(q); - } - - private: - MeshPredictionSchemeGeometricNormalPredictorArea - predictor_; - OctahedronToolBox octahedron_tool_box_; - RAnsBitDecoder flip_normal_bit_decoder_; -}; - -template -bool MeshPredictionSchemeGeometricNormalDecoder< - DataTypeT, TransformT, - MeshDataT>::ComputeOriginalValues(const CorrType *in_corr, - DataTypeT *out_data, int /* size */, - int num_components, - const PointIndex *entry_to_point_id_map) { - this->SetQuantizationBits(this->transform().quantization_bits()); - predictor_.SetEntryToPointIdMap(entry_to_point_id_map); - DRACO_DCHECK(this->IsInitialized()); - - // Expecting in_data in octahedral coordinates, i.e., portable attribute. - DRACO_DCHECK_EQ(num_components, 2); - - const int corner_map_size = - static_cast(this->mesh_data().data_to_corner_map()->size()); - - VectorD pred_normal_3d; - int32_t pred_normal_oct[2]; - - for (int data_id = 0; data_id < corner_map_size; ++data_id) { - const CornerIndex corner_id = - this->mesh_data().data_to_corner_map()->at(data_id); - predictor_.ComputePredictedValue(corner_id, pred_normal_3d.data()); - - // Compute predicted octahedral coordinates. - octahedron_tool_box_.CanonicalizeIntegerVector(pred_normal_3d.data()); - DRACO_DCHECK_EQ(pred_normal_3d.AbsSum(), - octahedron_tool_box_.center_value()); - if (flip_normal_bit_decoder_.DecodeNextBit()) { - pred_normal_3d = -pred_normal_3d; - } - octahedron_tool_box_.IntegerVectorToQuantizedOctahedralCoords( - pred_normal_3d.data(), pred_normal_oct, pred_normal_oct + 1); - - const int data_offset = data_id * 2; - this->transform().ComputeOriginalValue( - pred_normal_oct, in_corr + data_offset, out_data + data_offset); - } - flip_normal_bit_decoder_.EndDecoding(); - return true; -} - -template -bool MeshPredictionSchemeGeometricNormalDecoder< - DataTypeT, TransformT, MeshDataT>::DecodePredictionData(DecoderBuffer - *buffer) { - // Get data needed for transform - if (!this->transform().DecodeTransformData(buffer)) { - return false; - } - -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 2)) { - uint8_t prediction_mode; - if (!buffer->Decode(&prediction_mode)) { - return false; - } - - if (!predictor_.SetNormalPredictionMode( - NormalPredictionMode(prediction_mode))) { - return false; - } - } -#endif - - // Init normal flips. - if (!flip_normal_bit_decoder_.StartDecoding(buffer)) { - return false; - } - - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h deleted file mode 100644 index cf146f8..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_ENCODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h" -#include "draco/compression/bit_coders/rans_bit_encoder.h" -#include "draco/compression/config/compression_shared.h" - -namespace draco { - -// Prediction scheme for normals based on the underlying geometry. -// At a smooth vertices normals are computed by weighting the normals of -// adjacent faces with the area of these faces. At seams, the same approach -// applies for seam corners. -template -class MeshPredictionSchemeGeometricNormalEncoder - : public MeshPredictionSchemeEncoder { - public: - using CorrType = typename MeshPredictionSchemeEncoder::CorrType; - MeshPredictionSchemeGeometricNormalEncoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeEncoder( - attribute, transform, mesh_data), - predictor_(mesh_data) {} - - bool ComputeCorrectionValues( - const DataTypeT *in_data, CorrType *out_corr, int size, - int num_components, const PointIndex *entry_to_point_id_map) override; - - bool EncodePredictionData(EncoderBuffer *buffer) override; - - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_GEOMETRIC_NORMAL; - } - - bool IsInitialized() const override { - if (!predictor_.IsInitialized()) { - return false; - } - if (!this->mesh_data().IsInitialized()) { - return false; - } - return true; - } - - int GetNumParentAttributes() const override { return 1; } - - GeometryAttribute::Type GetParentAttributeType(int i) const override { - DRACO_DCHECK_EQ(i, 0); - (void)i; - return GeometryAttribute::POSITION; - } - - bool SetParentAttribute(const PointAttribute *att) override { - if (att->attribute_type() != GeometryAttribute::POSITION) { - return false; // Invalid attribute type. - } - if (att->num_components() != 3) { - return false; // Currently works only for 3 component positions. - } - predictor_.SetPositionAttribute(*att); - return true; - } - - private: - void SetQuantizationBits(int q) { - DRACO_DCHECK_GE(q, 2); - DRACO_DCHECK_LE(q, 30); - octahedron_tool_box_.SetQuantizationBits(q); - } - MeshPredictionSchemeGeometricNormalPredictorArea - predictor_; - - OctahedronToolBox octahedron_tool_box_; - RAnsBitEncoder flip_normal_bit_encoder_; -}; - -template -bool MeshPredictionSchemeGeometricNormalEncoder:: - ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, - int size, int num_components, - const PointIndex *entry_to_point_id_map) { - this->SetQuantizationBits(this->transform().quantization_bits()); - predictor_.SetEntryToPointIdMap(entry_to_point_id_map); - DRACO_DCHECK(this->IsInitialized()); - // Expecting in_data in octahedral coordinates, i.e., portable attribute. - DRACO_DCHECK_EQ(num_components, 2); - - flip_normal_bit_encoder_.StartEncoding(); - - const int corner_map_size = - static_cast(this->mesh_data().data_to_corner_map()->size()); - - VectorD pred_normal_3d; - VectorD pos_pred_normal_oct; - VectorD neg_pred_normal_oct; - VectorD pos_correction; - VectorD neg_correction; - for (int data_id = 0; data_id < corner_map_size; ++data_id) { - const CornerIndex corner_id = - this->mesh_data().data_to_corner_map()->at(data_id); - predictor_.ComputePredictedValue(corner_id, pred_normal_3d.data()); - - // Compute predicted octahedral coordinates. - octahedron_tool_box_.CanonicalizeIntegerVector(pred_normal_3d.data()); - DRACO_DCHECK_EQ(pred_normal_3d.AbsSum(), - octahedron_tool_box_.center_value()); - - // Compute octahedral coordinates for both possible directions. - octahedron_tool_box_.IntegerVectorToQuantizedOctahedralCoords( - pred_normal_3d.data(), pos_pred_normal_oct.data(), - pos_pred_normal_oct.data() + 1); - pred_normal_3d = -pred_normal_3d; - octahedron_tool_box_.IntegerVectorToQuantizedOctahedralCoords( - pred_normal_3d.data(), neg_pred_normal_oct.data(), - neg_pred_normal_oct.data() + 1); - - // Choose the one with the best correction value. - const int data_offset = data_id * 2; - this->transform().ComputeCorrection(in_data + data_offset, - pos_pred_normal_oct.data(), - pos_correction.data()); - this->transform().ComputeCorrection(in_data + data_offset, - neg_pred_normal_oct.data(), - neg_correction.data()); - pos_correction[0] = octahedron_tool_box_.ModMax(pos_correction[0]); - pos_correction[1] = octahedron_tool_box_.ModMax(pos_correction[1]); - neg_correction[0] = octahedron_tool_box_.ModMax(neg_correction[0]); - neg_correction[1] = octahedron_tool_box_.ModMax(neg_correction[1]); - if (pos_correction.AbsSum() < neg_correction.AbsSum()) { - flip_normal_bit_encoder_.EncodeBit(false); - (out_corr + data_offset)[0] = - octahedron_tool_box_.MakePositive(pos_correction[0]); - (out_corr + data_offset)[1] = - octahedron_tool_box_.MakePositive(pos_correction[1]); - } else { - flip_normal_bit_encoder_.EncodeBit(true); - (out_corr + data_offset)[0] = - octahedron_tool_box_.MakePositive(neg_correction[0]); - (out_corr + data_offset)[1] = - octahedron_tool_box_.MakePositive(neg_correction[1]); - } - } - return true; -} - -template -bool MeshPredictionSchemeGeometricNormalEncoder< - DataTypeT, TransformT, MeshDataT>::EncodePredictionData(EncoderBuffer - *buffer) { - if (!this->transform().EncodeTransformData(buffer)) { - return false; - } - - // Encode normal flips. - flip_normal_bit_encoder_.EndEncoding(buffer); - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h deleted file mode 100644 index 775eded..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_PREDICTOR_AREA_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_PREDICTOR_AREA_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h" - -namespace draco { - -// This predictor estimates the normal via the surrounding triangles of the -// given corner. Triangles are weighted according to their area. -template -class MeshPredictionSchemeGeometricNormalPredictorArea - : public MeshPredictionSchemeGeometricNormalPredictorBase< - DataTypeT, TransformT, MeshDataT> { - typedef MeshPredictionSchemeGeometricNormalPredictorBase< - DataTypeT, TransformT, MeshDataT> - Base; - - public: - explicit MeshPredictionSchemeGeometricNormalPredictorArea(const MeshDataT &md) - : Base(md) { - this->SetNormalPredictionMode(TRIANGLE_AREA); - }; - virtual ~MeshPredictionSchemeGeometricNormalPredictorArea() {} - - // Computes predicted octahedral coordinates on a given corner. - void ComputePredictedValue(CornerIndex corner_id, - DataTypeT *prediction) override { - DRACO_DCHECK(this->IsInitialized()); - typedef typename MeshDataT::CornerTable CornerTable; - const CornerTable *const corner_table = this->mesh_data_.corner_table(); - // Going to compute the predicted normal from the surrounding triangles - // according to the connectivity of the given corner table. - VertexCornersIterator cit(corner_table, corner_id); - // Position of central vertex does not change in loop. - const VectorD pos_cent = this->GetPositionForCorner(corner_id); - // Computing normals for triangles and adding them up. - - VectorD normal; - CornerIndex c_next, c_prev; - while (!cit.End()) { - // Getting corners. - if (this->normal_prediction_mode_ == ONE_TRIANGLE) { - c_next = corner_table->Next(corner_id); - c_prev = corner_table->Previous(corner_id); - } else { - c_next = corner_table->Next(cit.Corner()); - c_prev = corner_table->Previous(cit.Corner()); - } - const VectorD pos_next = this->GetPositionForCorner(c_next); - const VectorD pos_prev = this->GetPositionForCorner(c_prev); - - // Computing delta vectors to next and prev. - const VectorD delta_next = pos_next - pos_cent; - const VectorD delta_prev = pos_prev - pos_cent; - - // Computing cross product. - const VectorD cross = CrossProduct(delta_next, delta_prev); - - // Prevent signed integer overflows by doing math as unsigned. - auto normal_data = reinterpret_cast(normal.data()); - auto cross_data = reinterpret_cast(cross.data()); - normal_data[0] = normal_data[0] + cross_data[0]; - normal_data[1] = normal_data[1] + cross_data[1]; - normal_data[2] = normal_data[2] + cross_data[2]; - - cit.Next(); - } - - // Convert to int32_t, make sure entries are not too large. - constexpr int64_t upper_bound = 1 << 29; - if (this->normal_prediction_mode_ == ONE_TRIANGLE) { - const int32_t abs_sum = static_cast(normal.AbsSum()); - if (abs_sum > upper_bound) { - const int64_t quotient = abs_sum / upper_bound; - normal = normal / quotient; - } - } else { - const int64_t abs_sum = normal.AbsSum(); - if (abs_sum > upper_bound) { - const int64_t quotient = abs_sum / upper_bound; - normal = normal / quotient; - } - } - DRACO_DCHECK_LE(normal.AbsSum(), upper_bound); - prediction[0] = static_cast(normal[0]); - prediction[1] = static_cast(normal[1]); - prediction[2] = static_cast(normal[2]); - } - bool SetNormalPredictionMode(NormalPredictionMode mode) override { - if (mode == ONE_TRIANGLE) { - this->normal_prediction_mode_ = mode; - return true; - } else if (mode == TRIANGLE_AREA) { - this->normal_prediction_mode_ = mode; - return true; - } - return false; - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_PREDICTOR_AREA_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h deleted file mode 100644 index a554dda..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_PREDICTOR_BASE_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_PREDICTOR_BASE_H_ - -#include - -#include "draco/attributes/point_attribute.h" -#include "draco/compression/attributes/normal_compression_utils.h" -#include "draco/compression/config/compression_shared.h" -#include "draco/core/math_utils.h" -#include "draco/core/vector_d.h" -#include "draco/mesh/corner_table.h" -#include "draco/mesh/corner_table_iterators.h" - -namespace draco { - -// Base class for geometric normal predictors using position attribute. -template -class MeshPredictionSchemeGeometricNormalPredictorBase { - protected: - explicit MeshPredictionSchemeGeometricNormalPredictorBase(const MeshDataT &md) - : pos_attribute_(nullptr), - entry_to_point_id_map_(nullptr), - mesh_data_(md) {} - virtual ~MeshPredictionSchemeGeometricNormalPredictorBase() {} - - public: - void SetPositionAttribute(const PointAttribute &position_attribute) { - pos_attribute_ = &position_attribute; - } - void SetEntryToPointIdMap(const PointIndex *map) { - entry_to_point_id_map_ = map; - } - bool IsInitialized() const { - if (pos_attribute_ == nullptr) { - return false; - } - if (entry_to_point_id_map_ == nullptr) { - return false; - } - return true; - } - - virtual bool SetNormalPredictionMode(NormalPredictionMode mode) = 0; - virtual NormalPredictionMode GetNormalPredictionMode() const { - return normal_prediction_mode_; - } - - protected: - VectorD GetPositionForDataId(int data_id) const { - DRACO_DCHECK(this->IsInitialized()); - const auto point_id = entry_to_point_id_map_[data_id]; - const auto pos_val_id = pos_attribute_->mapped_index(point_id); - VectorD pos; - pos_attribute_->ConvertValue(pos_val_id, &pos[0]); - return pos; - } - VectorD GetPositionForCorner(CornerIndex ci) const { - DRACO_DCHECK(this->IsInitialized()); - const auto corner_table = mesh_data_.corner_table(); - const auto vert_id = corner_table->Vertex(ci).value(); - const auto data_id = mesh_data_.vertex_to_data_map()->at(vert_id); - return GetPositionForDataId(data_id); - } - VectorD GetOctahedralCoordForDataId(int data_id, - const DataTypeT *data) const { - DRACO_DCHECK(this->IsInitialized()); - const int data_offset = data_id * 2; - return VectorD(data[data_offset], data[data_offset + 1]); - } - // Computes predicted octahedral coordinates on a given corner. - virtual void ComputePredictedValue(CornerIndex corner_id, - DataTypeT *prediction) = 0; - - const PointAttribute *pos_attribute_; - const PointIndex *entry_to_point_id_map_; - MeshDataT mesh_data_; - NormalPredictionMode normal_prediction_mode_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_GEOMETRIC_NORMAL_PREDICTOR_BASE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h deleted file mode 100644 index fc82e0a..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_MULTI_PARALLELOGRAM_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_MULTI_PARALLELOGRAM_DECODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" -#include "draco/draco_features.h" - -namespace draco { - -// Decoder for predictions encoded by multi-parallelogram encoding scheme. -// See the corresponding encoder for method description. -template -class MeshPredictionSchemeMultiParallelogramDecoder - : public MeshPredictionSchemeDecoder { - public: - using CorrType = - typename PredictionSchemeDecoder::CorrType; - using CornerTable = typename MeshDataT::CornerTable; - - explicit MeshPredictionSchemeMultiParallelogramDecoder( - const PointAttribute *attribute) - : MeshPredictionSchemeDecoder( - attribute) {} - MeshPredictionSchemeMultiParallelogramDecoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeDecoder( - attribute, transform, mesh_data) {} - - bool ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int size, int num_components, - const PointIndex *entry_to_point_id_map) override; - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_MULTI_PARALLELOGRAM; - } - - bool IsInitialized() const override { - return this->mesh_data().IsInitialized(); - } -}; - -template -bool MeshPredictionSchemeMultiParallelogramDecoder:: - ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int /* size */, int num_components, - const PointIndex * /* entry_to_point_id_map */) { - this->transform().Init(num_components); - - // For storage of prediction values (already initialized to zero). - std::unique_ptr pred_vals(new DataTypeT[num_components]()); - std::unique_ptr parallelogram_pred_vals( - new DataTypeT[num_components]()); - - this->transform().ComputeOriginalValue(pred_vals.get(), in_corr, out_data); - - const CornerTable *const table = this->mesh_data().corner_table(); - const std::vector *const vertex_to_data_map = - this->mesh_data().vertex_to_data_map(); - - const int corner_map_size = - static_cast(this->mesh_data().data_to_corner_map()->size()); - for (int p = 1; p < corner_map_size; ++p) { - const CornerIndex start_corner_id = - this->mesh_data().data_to_corner_map()->at(p); - - CornerIndex corner_id(start_corner_id); - int num_parallelograms = 0; - for (int i = 0; i < num_components; ++i) { - pred_vals[i] = static_cast(0); - } - while (corner_id != kInvalidCornerIndex) { - if (ComputeParallelogramPrediction( - p, corner_id, table, *vertex_to_data_map, out_data, - num_components, parallelogram_pred_vals.get())) { - for (int c = 0; c < num_components; ++c) { - pred_vals[c] += parallelogram_pred_vals[c]; - } - ++num_parallelograms; - } - - // Proceed to the next corner attached to the vertex. - corner_id = table->SwingRight(corner_id); - if (corner_id == start_corner_id) { - corner_id = kInvalidCornerIndex; - } - } - - const int dst_offset = p * num_components; - if (num_parallelograms == 0) { - // No parallelogram was valid. - // We use the last decoded point as a reference. - const int src_offset = (p - 1) * num_components; - this->transform().ComputeOriginalValue( - out_data + src_offset, in_corr + dst_offset, out_data + dst_offset); - } else { - // Compute the correction from the predicted value. - for (int c = 0; c < num_components; ++c) { - pred_vals[c] /= num_parallelograms; - } - this->transform().ComputeOriginalValue( - pred_vals.get(), in_corr + dst_offset, out_data + dst_offset); - } - } - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_MULTI_PARALLELOGRAM_DECODER_H_ -#endif diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h deleted file mode 100644 index 301b357..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_MULTI_PARALLELOGRAM_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_MULTI_PARALLELOGRAM_ENCODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" - -namespace draco { - -// Multi parallelogram prediction predicts attribute values using information -// from all opposite faces to the predicted vertex, compared to the standard -// prediction scheme, where only one opposite face is used (see -// prediction_scheme_parallelogram.h). This approach is generally slower than -// the standard parallelogram prediction, but it usually results in better -// prediction (5 - 20% based on the quantization level. Better gains can be -// achieved when more aggressive quantization is used). -template -class MeshPredictionSchemeMultiParallelogramEncoder - : public MeshPredictionSchemeEncoder { - public: - using CorrType = - typename PredictionSchemeEncoder::CorrType; - using CornerTable = typename MeshDataT::CornerTable; - - explicit MeshPredictionSchemeMultiParallelogramEncoder( - const PointAttribute *attribute) - : MeshPredictionSchemeEncoder( - attribute) {} - MeshPredictionSchemeMultiParallelogramEncoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeEncoder( - attribute, transform, mesh_data) {} - - bool ComputeCorrectionValues( - const DataTypeT *in_data, CorrType *out_corr, int size, - int num_components, const PointIndex *entry_to_point_id_map) override; - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_MULTI_PARALLELOGRAM; - } - - bool IsInitialized() const override { - return this->mesh_data().IsInitialized(); - } -}; - -template -bool MeshPredictionSchemeMultiParallelogramEncoder:: - ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, - int size, int num_components, - const PointIndex * /* entry_to_point_id_map */) { - this->transform().Init(in_data, size, num_components); - const CornerTable *const table = this->mesh_data().corner_table(); - const std::vector *const vertex_to_data_map = - this->mesh_data().vertex_to_data_map(); - - // For storage of prediction values (already initialized to zero). - std::unique_ptr pred_vals(new DataTypeT[num_components]()); - std::unique_ptr parallelogram_pred_vals( - new DataTypeT[num_components]()); - - // We start processing from the end because this prediction uses data from - // previous entries that could be overwritten when an entry is processed. - for (int p = - static_cast(this->mesh_data().data_to_corner_map()->size() - 1); - p > 0; --p) { - const CornerIndex start_corner_id = - this->mesh_data().data_to_corner_map()->at(p); - - // Go over all corners attached to the vertex and compute the predicted - // value from the parallelograms defined by their opposite faces. - CornerIndex corner_id(start_corner_id); - int num_parallelograms = 0; - for (int i = 0; i < num_components; ++i) { - pred_vals[i] = static_cast(0); - } - while (corner_id != kInvalidCornerIndex) { - if (ComputeParallelogramPrediction( - p, corner_id, table, *vertex_to_data_map, in_data, num_components, - parallelogram_pred_vals.get())) { - for (int c = 0; c < num_components; ++c) { - pred_vals[c] += parallelogram_pred_vals[c]; - } - ++num_parallelograms; - } - - // Proceed to the next corner attached to the vertex. - corner_id = table->SwingRight(corner_id); - if (corner_id == start_corner_id) { - corner_id = kInvalidCornerIndex; - } - } - const int dst_offset = p * num_components; - if (num_parallelograms == 0) { - // No parallelogram was valid. - // We use the last encoded point as a reference. - const int src_offset = (p - 1) * num_components; - this->transform().ComputeCorrection( - in_data + dst_offset, in_data + src_offset, out_corr + dst_offset); - } else { - // Compute the correction from the predicted value. - for (int c = 0; c < num_components; ++c) { - pred_vals[c] /= num_parallelograms; - } - this->transform().ComputeCorrection(in_data + dst_offset, pred_vals.get(), - out_corr + dst_offset); - } - } - // First element is always fixed because it cannot be predicted. - for (int i = 0; i < num_components; ++i) { - pred_vals[i] = static_cast(0); - } - this->transform().ComputeCorrection(in_data, pred_vals.get(), out_corr); - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_MULTI_PARALLELOGRAM_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_decoder.h deleted file mode 100644 index 4d47ddf..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_decoder.h +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_DECODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" - -namespace draco { - -// Decoder for attribute values encoded with the standard parallelogram -// prediction. See the description of the corresponding encoder for more -// details. -template -class MeshPredictionSchemeParallelogramDecoder - : public MeshPredictionSchemeDecoder { - public: - using CorrType = - typename PredictionSchemeDecoder::CorrType; - using CornerTable = typename MeshDataT::CornerTable; - explicit MeshPredictionSchemeParallelogramDecoder( - const PointAttribute *attribute) - : MeshPredictionSchemeDecoder( - attribute) {} - MeshPredictionSchemeParallelogramDecoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeDecoder( - attribute, transform, mesh_data) {} - - bool ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int size, int num_components, - const PointIndex *entry_to_point_id_map) override; - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_PARALLELOGRAM; - } - - bool IsInitialized() const override { - return this->mesh_data().IsInitialized(); - } -}; - -template -bool MeshPredictionSchemeParallelogramDecoder:: - ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int /* size */, int num_components, - const PointIndex * /* entry_to_point_id_map */) { - this->transform().Init(num_components); - - const CornerTable *const table = this->mesh_data().corner_table(); - const std::vector *const vertex_to_data_map = - this->mesh_data().vertex_to_data_map(); - - // For storage of prediction values (already initialized to zero). - std::unique_ptr pred_vals(new DataTypeT[num_components]()); - - // Restore the first value. - this->transform().ComputeOriginalValue(pred_vals.get(), in_corr, out_data); - - const int corner_map_size = - static_cast(this->mesh_data().data_to_corner_map()->size()); - for (int p = 1; p < corner_map_size; ++p) { - const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); - const int dst_offset = p * num_components; - if (!ComputeParallelogramPrediction(p, corner_id, table, - *vertex_to_data_map, out_data, - num_components, pred_vals.get())) { - // Parallelogram could not be computed, Possible because some of the - // vertices are not valid (not encoded yet). - // We use the last encoded point as a reference (delta coding). - const int src_offset = (p - 1) * num_components; - this->transform().ComputeOriginalValue( - out_data + src_offset, in_corr + dst_offset, out_data + dst_offset); - } else { - // Apply the parallelogram prediction. - this->transform().ComputeOriginalValue( - pred_vals.get(), in_corr + dst_offset, out_data + dst_offset); - } - } - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h deleted file mode 100644 index f008019..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_ENCODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" - -namespace draco { - -// Parallelogram prediction predicts an attribute value V from three vertices -// on the opposite face to the predicted vertex. The values on the three -// vertices are used to construct a parallelogram V' = O - A - B, where O is the -// value on the opposite vertex, and A, B are values on the shared vertices: -// V -// / \ -// / \ -// / \ -// A-------B -// \ / -// \ / -// \ / -// O -// -template -class MeshPredictionSchemeParallelogramEncoder - : public MeshPredictionSchemeEncoder { - public: - using CorrType = - typename PredictionSchemeEncoder::CorrType; - using CornerTable = typename MeshDataT::CornerTable; - explicit MeshPredictionSchemeParallelogramEncoder( - const PointAttribute *attribute) - : MeshPredictionSchemeEncoder( - attribute) {} - MeshPredictionSchemeParallelogramEncoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeEncoder( - attribute, transform, mesh_data) {} - - bool ComputeCorrectionValues( - const DataTypeT *in_data, CorrType *out_corr, int size, - int num_components, const PointIndex *entry_to_point_id_map) override; - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_PARALLELOGRAM; - } - - bool IsInitialized() const override { - return this->mesh_data().IsInitialized(); - } -}; - -template -bool MeshPredictionSchemeParallelogramEncoder:: - ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, - int size, int num_components, - const PointIndex * /* entry_to_point_id_map */) { - this->transform().Init(in_data, size, num_components); - // For storage of prediction values (already initialized to zero). - std::unique_ptr pred_vals(new DataTypeT[num_components]()); - - // We start processing from the end because this prediction uses data from - // previous entries that could be overwritten when an entry is processed. - const CornerTable *const table = this->mesh_data().corner_table(); - const std::vector *const vertex_to_data_map = - this->mesh_data().vertex_to_data_map(); - for (int p = - static_cast(this->mesh_data().data_to_corner_map()->size() - 1); - p > 0; --p) { - const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); - const int dst_offset = p * num_components; - if (!ComputeParallelogramPrediction(p, corner_id, table, - *vertex_to_data_map, in_data, - num_components, pred_vals.get())) { - // Parallelogram could not be computed, Possible because some of the - // vertices are not valid (not encoded yet). - // We use the last encoded point as a reference (delta coding). - const int src_offset = (p - 1) * num_components; - this->transform().ComputeCorrection( - in_data + dst_offset, in_data + src_offset, out_corr + dst_offset); - } else { - // Apply the parallelogram prediction. - this->transform().ComputeCorrection(in_data + dst_offset, pred_vals.get(), - out_corr + dst_offset); - } - } - // First element is always fixed because it cannot be predicted. - for (int i = 0; i < num_components; ++i) { - pred_vals[i] = static_cast(0); - } - this->transform().ComputeCorrection(in_data, pred_vals.get(), out_corr); - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h deleted file mode 100644 index fd10fb5..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Shared functionality for different parallelogram prediction schemes. - -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_SHARED_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_SHARED_H_ - -#include "draco/mesh/corner_table.h" -#include "draco/mesh/mesh.h" - -namespace draco { - -// TODO(draco-eng) consolidate Vertex/next/previous queries to one call -// (performance). -template -inline void GetParallelogramEntries( - const CornerIndex ci, const CornerTableT *table, - const std::vector &vertex_to_data_map, int *opp_entry, - int *next_entry, int *prev_entry) { - // One vertex of the input |table| correspond to exactly one attribute value - // entry. The |table| can be either CornerTable for per-vertex attributes, - // or MeshAttributeCornerTable for attributes with interior seams. - *opp_entry = vertex_to_data_map[table->Vertex(ci).value()]; - *next_entry = vertex_to_data_map[table->Vertex(table->Next(ci)).value()]; - *prev_entry = vertex_to_data_map[table->Vertex(table->Previous(ci)).value()]; -} - -// Computes parallelogram prediction for a given corner and data entry id. -// The prediction is stored in |out_prediction|. -// Function returns false when the prediction couldn't be computed, e.g. because -// not all entry points were available. -template -inline bool ComputeParallelogramPrediction( - int data_entry_id, const CornerIndex ci, const CornerTableT *table, - const std::vector &vertex_to_data_map, const DataTypeT *in_data, - int num_components, DataTypeT *out_prediction) { - const CornerIndex oci = table->Opposite(ci); - if (oci == kInvalidCornerIndex) { - return false; - } - int vert_opp, vert_next, vert_prev; - GetParallelogramEntries(oci, table, vertex_to_data_map, - &vert_opp, &vert_next, &vert_prev); - if (vert_opp < data_entry_id && vert_next < data_entry_id && - vert_prev < data_entry_id) { - // Apply the parallelogram prediction. - const int v_opp_off = vert_opp * num_components; - const int v_next_off = vert_next * num_components; - const int v_prev_off = vert_prev * num_components; - for (int c = 0; c < num_components; ++c) { - const int64_t in_data_next_off = in_data[v_next_off + c]; - const int64_t in_data_prev_off = in_data[v_prev_off + c]; - const int64_t in_data_opp_off = in_data[v_opp_off + c]; - const int64_t result = - (in_data_next_off + in_data_prev_off) - in_data_opp_off; - - out_prediction[c] = static_cast(result); - } - return true; - } - return false; // Not all data is available for prediction -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_PARALLELOGRAM_SHARED_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h deleted file mode 100644 index 02cf7e6..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h +++ /dev/null @@ -1,344 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_DECODER_H_ - -#include - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" -#include "draco/compression/bit_coders/rans_bit_decoder.h" -#include "draco/core/varint_decoding.h" -#include "draco/core/vector_d.h" -#include "draco/draco_features.h" -#include "draco/mesh/corner_table.h" - -namespace draco { - -// Decoder for predictions of UV coordinates encoded by our specialized texture -// coordinate predictor. See the corresponding encoder for more details. Note -// that this predictor is not portable and should not be used anymore. See -// MeshPredictionSchemeTexCoordsPortableEncoder/Decoder for a portable version -// of this prediction scheme. -template -class MeshPredictionSchemeTexCoordsDecoder - : public MeshPredictionSchemeDecoder { - public: - using CorrType = typename MeshPredictionSchemeDecoder::CorrType; - MeshPredictionSchemeTexCoordsDecoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data, int version) - : MeshPredictionSchemeDecoder( - attribute, transform, mesh_data), - pos_attribute_(nullptr), - entry_to_point_id_map_(nullptr), - num_components_(0), - version_(version) {} - - bool ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int size, int num_components, - const PointIndex *entry_to_point_id_map) override; - - bool DecodePredictionData(DecoderBuffer *buffer) override; - - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_TEX_COORDS_DEPRECATED; - } - - bool IsInitialized() const override { - if (pos_attribute_ == nullptr) { - return false; - } - if (!this->mesh_data().IsInitialized()) { - return false; - } - return true; - } - - int GetNumParentAttributes() const override { return 1; } - - GeometryAttribute::Type GetParentAttributeType(int i) const override { - DRACO_DCHECK_EQ(i, 0); - (void)i; - return GeometryAttribute::POSITION; - } - - bool SetParentAttribute(const PointAttribute *att) override { - if (att == nullptr) { - return false; - } - if (att->attribute_type() != GeometryAttribute::POSITION) { - return false; // Invalid attribute type. - } - if (att->num_components() != 3) { - return false; // Currently works only for 3 component positions. - } - pos_attribute_ = att; - return true; - } - - protected: - Vector3f GetPositionForEntryId(int entry_id) const { - const PointIndex point_id = entry_to_point_id_map_[entry_id]; - Vector3f pos; - pos_attribute_->ConvertValue(pos_attribute_->mapped_index(point_id), - &pos[0]); - return pos; - } - - Vector2f GetTexCoordForEntryId(int entry_id, const DataTypeT *data) const { - const int data_offset = entry_id * num_components_; - return Vector2f(static_cast(data[data_offset]), - static_cast(data[data_offset + 1])); - } - - void ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data, - int data_id); - - private: - const PointAttribute *pos_attribute_; - const PointIndex *entry_to_point_id_map_; - std::unique_ptr predicted_value_; - int num_components_; - // Encoded / decoded array of UV flips. - std::vector orientations_; - int version_; -}; - -template -bool MeshPredictionSchemeTexCoordsDecoder:: - ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int /* size */, int num_components, - const PointIndex *entry_to_point_id_map) { - num_components_ = num_components; - entry_to_point_id_map_ = entry_to_point_id_map; - predicted_value_ = - std::unique_ptr(new DataTypeT[num_components]); - this->transform().Init(num_components); - - const int corner_map_size = - static_cast(this->mesh_data().data_to_corner_map()->size()); - for (int p = 0; p < corner_map_size; ++p) { - const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); - ComputePredictedValue(corner_id, out_data, p); - - const int dst_offset = p * num_components; - this->transform().ComputeOriginalValue( - predicted_value_.get(), in_corr + dst_offset, out_data + dst_offset); - } - return true; -} - -template -bool MeshPredictionSchemeTexCoordsDecoder:: - DecodePredictionData(DecoderBuffer *buffer) { - // Decode the delta coded orientations. - uint32_t num_orientations = 0; - if (buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 2)) { - if (!buffer->Decode(&num_orientations)) { - return false; - } - } else { - if (!DecodeVarint(&num_orientations, buffer)) { - return false; - } - } - if (num_orientations == 0) { - return false; - } - orientations_.resize(num_orientations); - bool last_orientation = true; - RAnsBitDecoder decoder; - if (!decoder.StartDecoding(buffer)) { - return false; - } - for (uint32_t i = 0; i < num_orientations; ++i) { - if (!decoder.DecodeNextBit()) { - last_orientation = !last_orientation; - } - orientations_[i] = last_orientation; - } - decoder.EndDecoding(); - return MeshPredictionSchemeDecoder::DecodePredictionData(buffer); -} - -template -void MeshPredictionSchemeTexCoordsDecoder:: - ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data, - int data_id) { - // Compute the predicted UV coordinate from the positions on all corners - // of the processed triangle. For the best prediction, the UV coordinates - // on the next/previous corners need to be already encoded/decoded. - const CornerIndex next_corner_id = - this->mesh_data().corner_table()->Next(corner_id); - const CornerIndex prev_corner_id = - this->mesh_data().corner_table()->Previous(corner_id); - // Get the encoded data ids from the next and previous corners. - // The data id is the encoding order of the UV coordinates. - int next_data_id, prev_data_id; - - int next_vert_id, prev_vert_id; - next_vert_id = - this->mesh_data().corner_table()->Vertex(next_corner_id).value(); - prev_vert_id = - this->mesh_data().corner_table()->Vertex(prev_corner_id).value(); - - next_data_id = this->mesh_data().vertex_to_data_map()->at(next_vert_id); - prev_data_id = this->mesh_data().vertex_to_data_map()->at(prev_vert_id); - - if (prev_data_id < data_id && next_data_id < data_id) { - // Both other corners have available UV coordinates for prediction. - const Vector2f n_uv = GetTexCoordForEntryId(next_data_id, data); - const Vector2f p_uv = GetTexCoordForEntryId(prev_data_id, data); - if (p_uv == n_uv) { - // We cannot do a reliable prediction on degenerated UV triangles. - predicted_value_[0] = static_cast(p_uv[0]); - predicted_value_[1] = static_cast(p_uv[1]); - return; - } - - // Get positions at all corners. - const Vector3f tip_pos = GetPositionForEntryId(data_id); - const Vector3f next_pos = GetPositionForEntryId(next_data_id); - const Vector3f prev_pos = GetPositionForEntryId(prev_data_id); - // Use the positions of the above triangle to predict the texture coordinate - // on the tip corner C. - // Convert the triangle into a new coordinate system defined by orthogonal - // bases vectors S, T, where S is vector prev_pos - next_pos and T is an - // perpendicular vector to S in the same plane as vector the - // tip_pos - next_pos. - // The transformed triangle in the new coordinate system is then going to - // be represented as: - // - // 1 ^ - // | - // | - // | C - // | / \ - // | / \ - // |/ \ - // N--------------P - // 0 1 - // - // Where next_pos point (N) is at position (0, 0), prev_pos point (P) is - // at (1, 0). Our goal is to compute the position of the tip_pos point (C) - // in this new coordinate space (s, t). - // - const Vector3f pn = prev_pos - next_pos; - const Vector3f cn = tip_pos - next_pos; - const float pn_norm2_squared = pn.SquaredNorm(); - // Coordinate s of the tip corner C is simply the dot product of the - // normalized vectors |pn| and |cn| (normalized by the length of |pn|). - // Since both of these vectors are normalized, we don't need to perform the - // normalization explicitly and instead we can just use the squared norm - // of |pn| as a denominator of the resulting dot product of non normalized - // vectors. - float s, t; - // |pn_norm2_squared| can be exactly 0 when the next_pos and prev_pos are - // the same positions (e.g. because they were quantized to the same - // location). - if (version_ < DRACO_BITSTREAM_VERSION(1, 2) || pn_norm2_squared > 0) { - s = pn.Dot(cn) / pn_norm2_squared; - // To get the coordinate t, we can use formula: - // t = |C-N - (P-N) * s| / |P-N| - // Do not use std::sqrt to avoid changes in the bitstream. - t = sqrt((cn - pn * s).SquaredNorm() / pn_norm2_squared); - } else { - s = 0; - t = 0; - } - - // Now we need to transform the point (s, t) to the texture coordinate space - // UV. We know the UV coordinates on points N and P (N_UV and P_UV). Lets - // denote P_UV - N_UV = PN_UV. PN_UV is then 2 dimensional vector that can - // be used to define transformation from the normalized coordinate system - // to the texture coordinate system using a 3x3 affine matrix M: - // - // M = | PN_UV[0] -PN_UV[1] N_UV[0] | - // | PN_UV[1] PN_UV[0] N_UV[1] | - // | 0 0 1 | - // - // The predicted point C_UV in the texture space is then equal to - // C_UV = M * (s, t, 1). Because the triangle in UV space may be flipped - // around the PN_UV axis, we also need to consider point C_UV' = M * (s, -t) - // as the prediction. - const Vector2f pn_uv = p_uv - n_uv; - const float pnus = pn_uv[0] * s + n_uv[0]; - const float pnut = pn_uv[0] * t; - const float pnvs = pn_uv[1] * s + n_uv[1]; - const float pnvt = pn_uv[1] * t; - Vector2f predicted_uv; - - // When decoding the data, we already know which orientation to use. - const bool orientation = orientations_.back(); - orientations_.pop_back(); - if (orientation) - predicted_uv = Vector2f(pnus - pnvt, pnvs + pnut); - else - predicted_uv = Vector2f(pnus + pnvt, pnvs - pnut); - - if (std::is_integral::value) { - // Round the predicted value for integer types. - if (std::isnan(predicted_uv[0])) { - predicted_value_[0] = INT_MIN; - } else { - predicted_value_[0] = static_cast(floor(predicted_uv[0] + 0.5)); - } - if (std::isnan(predicted_uv[1])) { - predicted_value_[1] = INT_MIN; - } else { - predicted_value_[1] = static_cast(floor(predicted_uv[1] + 0.5)); - } - } else { - predicted_value_[0] = static_cast(predicted_uv[0]); - predicted_value_[1] = static_cast(predicted_uv[1]); - } - return; - } - // Else we don't have available textures on both corners. For such case we - // can't use positions for predicting the uv value and we resort to delta - // coding. - int data_offset = 0; - if (prev_data_id < data_id) { - // Use the value on the previous corner as the prediction. - data_offset = prev_data_id * num_components_; - } - if (next_data_id < data_id) { - // Use the value on the next corner as the prediction. - data_offset = next_data_id * num_components_; - } else { - // None of the other corners have a valid value. Use the last encoded value - // as the prediction if possible. - if (data_id > 0) { - data_offset = (data_id - 1) * num_components_; - } else { - // We are encoding the first value. Predict 0. - for (int i = 0; i < num_components_; ++i) { - predicted_value_[i] = 0; - } - return; - } - } - for (int i = 0; i < num_components_; ++i) { - predicted_value_[i] = data[data_offset + i]; - } -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_DECODER_H_ -#endif diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h deleted file mode 100644 index 813b72a..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_ENCODER_H_ - -#include - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" -#include "draco/compression/bit_coders/rans_bit_encoder.h" -#include "draco/core/varint_encoding.h" -#include "draco/core/vector_d.h" -#include "draco/mesh/corner_table.h" - -namespace draco { - -// Prediction scheme designed for predicting texture coordinates from known -// spatial position of vertices. For good parametrization, the ratios between -// triangle edge lengths should be about the same in both the spatial and UV -// coordinate spaces, which makes the positions a good predictor for the UV -// coordinates. -template -class MeshPredictionSchemeTexCoordsEncoder - : public MeshPredictionSchemeEncoder { - public: - using CorrType = typename MeshPredictionSchemeEncoder::CorrType; - MeshPredictionSchemeTexCoordsEncoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeEncoder( - attribute, transform, mesh_data), - pos_attribute_(nullptr), - entry_to_point_id_map_(nullptr), - num_components_(0) {} - - bool ComputeCorrectionValues( - const DataTypeT *in_data, CorrType *out_corr, int size, - int num_components, const PointIndex *entry_to_point_id_map) override; - - bool EncodePredictionData(EncoderBuffer *buffer) override; - - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_TEX_COORDS_DEPRECATED; - } - - bool IsInitialized() const override { - if (pos_attribute_ == nullptr) { - return false; - } - if (!this->mesh_data().IsInitialized()) { - return false; - } - return true; - } - - int GetNumParentAttributes() const override { return 1; } - - GeometryAttribute::Type GetParentAttributeType(int i) const override { - DRACO_DCHECK_EQ(i, 0); - (void)i; - return GeometryAttribute::POSITION; - } - - bool SetParentAttribute(const PointAttribute *att) override { - if (att->attribute_type() != GeometryAttribute::POSITION) { - return false; // Invalid attribute type. - } - if (att->num_components() != 3) { - return false; // Currently works only for 3 component positions. - } - pos_attribute_ = att; - return true; - } - - protected: - Vector3f GetPositionForEntryId(int entry_id) const { - const PointIndex point_id = entry_to_point_id_map_[entry_id]; - Vector3f pos; - pos_attribute_->ConvertValue(pos_attribute_->mapped_index(point_id), - &pos[0]); - return pos; - } - - Vector2f GetTexCoordForEntryId(int entry_id, const DataTypeT *data) const { - const int data_offset = entry_id * num_components_; - return Vector2f(static_cast(data[data_offset]), - static_cast(data[data_offset + 1])); - } - - void ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data, - int data_id); - - private: - const PointAttribute *pos_attribute_; - const PointIndex *entry_to_point_id_map_; - std::unique_ptr predicted_value_; - int num_components_; - // Encoded / decoded array of UV flips. - std::vector orientations_; -}; - -template -bool MeshPredictionSchemeTexCoordsEncoder:: - ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, - int size, int num_components, - const PointIndex *entry_to_point_id_map) { - num_components_ = num_components; - entry_to_point_id_map_ = entry_to_point_id_map; - predicted_value_ = - std::unique_ptr(new DataTypeT[num_components]); - this->transform().Init(in_data, size, num_components); - // We start processing from the end because this prediction uses data from - // previous entries that could be overwritten when an entry is processed. - for (int p = - static_cast(this->mesh_data().data_to_corner_map()->size()) - 1; - p >= 0; --p) { - const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); - ComputePredictedValue(corner_id, in_data, p); - - const int dst_offset = p * num_components; - this->transform().ComputeCorrection( - in_data + dst_offset, predicted_value_.get(), out_corr + dst_offset); - } - return true; -} - -template -bool MeshPredictionSchemeTexCoordsEncoder:: - EncodePredictionData(EncoderBuffer *buffer) { - // Encode the delta-coded orientations using arithmetic coding. - const uint32_t num_orientations = static_cast(orientations_.size()); - EncodeVarint(num_orientations, buffer); - bool last_orientation = true; - RAnsBitEncoder encoder; - encoder.StartEncoding(); - for (bool orientation : orientations_) { - encoder.EncodeBit(orientation == last_orientation); - last_orientation = orientation; - } - encoder.EndEncoding(buffer); - return MeshPredictionSchemeEncoder::EncodePredictionData(buffer); -} - -template -void MeshPredictionSchemeTexCoordsEncoder:: - ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data, - int data_id) { - // Compute the predicted UV coordinate from the positions on all corners - // of the processed triangle. For the best prediction, the UV coordinates - // on the next/previous corners need to be already encoded/decoded. - const CornerIndex next_corner_id = - this->mesh_data().corner_table()->Next(corner_id); - const CornerIndex prev_corner_id = - this->mesh_data().corner_table()->Previous(corner_id); - // Get the encoded data ids from the next and previous corners. - // The data id is the encoding order of the UV coordinates. - int next_data_id, prev_data_id; - - int next_vert_id, prev_vert_id; - next_vert_id = - this->mesh_data().corner_table()->Vertex(next_corner_id).value(); - prev_vert_id = - this->mesh_data().corner_table()->Vertex(prev_corner_id).value(); - - next_data_id = this->mesh_data().vertex_to_data_map()->at(next_vert_id); - prev_data_id = this->mesh_data().vertex_to_data_map()->at(prev_vert_id); - - if (prev_data_id < data_id && next_data_id < data_id) { - // Both other corners have available UV coordinates for prediction. - const Vector2f n_uv = GetTexCoordForEntryId(next_data_id, data); - const Vector2f p_uv = GetTexCoordForEntryId(prev_data_id, data); - if (p_uv == n_uv) { - // We cannot do a reliable prediction on degenerated UV triangles. - predicted_value_[0] = static_cast(p_uv[0]); - predicted_value_[1] = static_cast(p_uv[1]); - return; - } - - // Get positions at all corners. - const Vector3f tip_pos = GetPositionForEntryId(data_id); - const Vector3f next_pos = GetPositionForEntryId(next_data_id); - const Vector3f prev_pos = GetPositionForEntryId(prev_data_id); - // Use the positions of the above triangle to predict the texture coordinate - // on the tip corner C. - // Convert the triangle into a new coordinate system defined by orthogonal - // bases vectors S, T, where S is vector prev_pos - next_pos and T is an - // perpendicular vector to S in the same plane as vector the - // tip_pos - next_pos. - // The transformed triangle in the new coordinate system is then going to - // be represented as: - // - // 1 ^ - // | - // | - // | C - // | / \ - // | / \ - // |/ \ - // N--------------P - // 0 1 - // - // Where next_pos point (N) is at position (0, 0), prev_pos point (P) is - // at (1, 0). Our goal is to compute the position of the tip_pos point (C) - // in this new coordinate space (s, t). - // - const Vector3f pn = prev_pos - next_pos; - const Vector3f cn = tip_pos - next_pos; - const float pn_norm2_squared = pn.SquaredNorm(); - // Coordinate s of the tip corner C is simply the dot product of the - // normalized vectors |pn| and |cn| (normalized by the length of |pn|). - // Since both of these vectors are normalized, we don't need to perform the - // normalization explicitly and instead we can just use the squared norm - // of |pn| as a denominator of the resulting dot product of non normalized - // vectors. - float s, t; - // |pn_norm2_squared| can be exactly 0 when the next_pos and prev_pos are - // the same positions (e.g. because they were quantized to the same - // location). - if (pn_norm2_squared > 0) { - s = pn.Dot(cn) / pn_norm2_squared; - // To get the coordinate t, we can use formula: - // t = |C-N - (P-N) * s| / |P-N| - // Do not use std::sqrt to avoid changes in the bitstream. - t = sqrt((cn - pn * s).SquaredNorm() / pn_norm2_squared); - } else { - s = 0; - t = 0; - } - - // Now we need to transform the point (s, t) to the texture coordinate space - // UV. We know the UV coordinates on points N and P (N_UV and P_UV). Lets - // denote P_UV - N_UV = PN_UV. PN_UV is then 2 dimensional vector that can - // be used to define transformation from the normalized coordinate system - // to the texture coordinate system using a 3x3 affine matrix M: - // - // M = | PN_UV[0] -PN_UV[1] N_UV[0] | - // | PN_UV[1] PN_UV[0] N_UV[1] | - // | 0 0 1 | - // - // The predicted point C_UV in the texture space is then equal to - // C_UV = M * (s, t, 1). Because the triangle in UV space may be flipped - // around the PN_UV axis, we also need to consider point C_UV' = M * (s, -t) - // as the prediction. - const Vector2f pn_uv = p_uv - n_uv; - const float pnus = pn_uv[0] * s + n_uv[0]; - const float pnut = pn_uv[0] * t; - const float pnvs = pn_uv[1] * s + n_uv[1]; - const float pnvt = pn_uv[1] * t; - Vector2f predicted_uv; - - // When encoding compute both possible vectors and determine which one - // results in a better prediction. - const Vector2f predicted_uv_0(pnus - pnvt, pnvs + pnut); - const Vector2f predicted_uv_1(pnus + pnvt, pnvs - pnut); - const Vector2f c_uv = GetTexCoordForEntryId(data_id, data); - if ((c_uv - predicted_uv_0).SquaredNorm() < - (c_uv - predicted_uv_1).SquaredNorm()) { - predicted_uv = predicted_uv_0; - orientations_.push_back(true); - } else { - predicted_uv = predicted_uv_1; - orientations_.push_back(false); - } - if (std::is_integral::value) { - // Round the predicted value for integer types. - predicted_value_[0] = static_cast(floor(predicted_uv[0] + 0.5)); - predicted_value_[1] = static_cast(floor(predicted_uv[1] + 0.5)); - } else { - predicted_value_[0] = static_cast(predicted_uv[0]); - predicted_value_[1] = static_cast(predicted_uv[1]); - } - return; - } - // Else we don't have available textures on both corners. For such case we - // can't use positions for predicting the uv value and we resort to delta - // coding. - int data_offset = 0; - if (prev_data_id < data_id) { - // Use the value on the previous corner as the prediction. - data_offset = prev_data_id * num_components_; - } - if (next_data_id < data_id) { - // Use the value on the next corner as the prediction. - data_offset = next_data_id * num_components_; - } else { - // None of the other corners have a valid value. Use the last encoded value - // as the prediction if possible. - if (data_id > 0) { - data_offset = (data_id - 1) * num_components_; - } else { - // We are encoding the first value. Predict 0. - for (int i = 0; i < num_components_; ++i) { - predicted_value_[i] = 0; - } - return; - } - } - for (int i = 0; i < num_components_; ++i) { - predicted_value_[i] = data[data_offset + i]; - } -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h deleted file mode 100644 index 83d4966..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_DECODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h" -#include "draco/compression/bit_coders/rans_bit_decoder.h" - -namespace draco { - -// Decoder for predictions of UV coordinates encoded by our specialized and -// portable texture coordinate predictor. See the corresponding encoder for more -// details. -template -class MeshPredictionSchemeTexCoordsPortableDecoder - : public MeshPredictionSchemeDecoder { - public: - using CorrType = typename MeshPredictionSchemeDecoder::CorrType; - MeshPredictionSchemeTexCoordsPortableDecoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeDecoder( - attribute, transform, mesh_data), - predictor_(mesh_data) {} - - bool ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int size, int num_components, - const PointIndex *entry_to_point_id_map) override; - - bool DecodePredictionData(DecoderBuffer *buffer) override; - - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_TEX_COORDS_PORTABLE; - } - - bool IsInitialized() const override { - if (!predictor_.IsInitialized()) { - return false; - } - if (!this->mesh_data().IsInitialized()) { - return false; - } - return true; - } - - int GetNumParentAttributes() const override { return 1; } - - GeometryAttribute::Type GetParentAttributeType(int i) const override { - DRACO_DCHECK_EQ(i, 0); - (void)i; - return GeometryAttribute::POSITION; - } - - bool SetParentAttribute(const PointAttribute *att) override { - if (!att || att->attribute_type() != GeometryAttribute::POSITION) { - return false; // Invalid attribute type. - } - if (att->num_components() != 3) { - return false; // Currently works only for 3 component positions. - } - predictor_.SetPositionAttribute(*att); - return true; - } - - private: - MeshPredictionSchemeTexCoordsPortablePredictor - predictor_; -}; - -template -bool MeshPredictionSchemeTexCoordsPortableDecoder< - DataTypeT, TransformT, - MeshDataT>::ComputeOriginalValues(const CorrType *in_corr, - DataTypeT *out_data, int /* size */, - int num_components, - const PointIndex *entry_to_point_id_map) { - if (num_components != MeshPredictionSchemeTexCoordsPortablePredictor< - DataTypeT, MeshDataT>::kNumComponents) { - return false; - } - predictor_.SetEntryToPointIdMap(entry_to_point_id_map); - this->transform().Init(num_components); - - const int corner_map_size = - static_cast(this->mesh_data().data_to_corner_map()->size()); - for (int p = 0; p < corner_map_size; ++p) { - const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); - if (!predictor_.template ComputePredictedValue(corner_id, out_data, - p)) { - return false; - } - - const int dst_offset = p * num_components; - this->transform().ComputeOriginalValue(predictor_.predicted_value(), - in_corr + dst_offset, - out_data + dst_offset); - } - return true; -} - -template -bool MeshPredictionSchemeTexCoordsPortableDecoder< - DataTypeT, TransformT, MeshDataT>::DecodePredictionData(DecoderBuffer - *buffer) { - // Decode the delta coded orientations. - int32_t num_orientations = 0; - if (!buffer->Decode(&num_orientations) || num_orientations < 0) { - return false; - } - predictor_.ResizeOrientations(num_orientations); - bool last_orientation = true; - RAnsBitDecoder decoder; - if (!decoder.StartDecoding(buffer)) { - return false; - } - for (int i = 0; i < num_orientations; ++i) { - if (!decoder.DecodeNextBit()) { - last_orientation = !last_orientation; - } - predictor_.set_orientation(i, last_orientation); - } - decoder.EndDecoding(); - return MeshPredictionSchemeDecoder::DecodePredictionData(buffer); -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h deleted file mode 100644 index 741ec66..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_ENCODER_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h" -#include "draco/compression/bit_coders/rans_bit_encoder.h" - -namespace draco { - -// Prediction scheme designed for predicting texture coordinates from known -// spatial position of vertices. For isometric parametrizations, the ratios -// between triangle edge lengths should be about the same in both the spatial -// and UV coordinate spaces, which makes the positions a good predictor for the -// UV coordinates. Note that this may not be the optimal approach for other -// parametrizations such as projective ones. -template -class MeshPredictionSchemeTexCoordsPortableEncoder - : public MeshPredictionSchemeEncoder { - public: - using CorrType = typename MeshPredictionSchemeEncoder::CorrType; - MeshPredictionSchemeTexCoordsPortableEncoder(const PointAttribute *attribute, - const TransformT &transform, - const MeshDataT &mesh_data) - : MeshPredictionSchemeEncoder( - attribute, transform, mesh_data), - predictor_(mesh_data) {} - - bool ComputeCorrectionValues( - const DataTypeT *in_data, CorrType *out_corr, int size, - int num_components, const PointIndex *entry_to_point_id_map) override; - - bool EncodePredictionData(EncoderBuffer *buffer) override; - - PredictionSchemeMethod GetPredictionMethod() const override { - return MESH_PREDICTION_TEX_COORDS_PORTABLE; - } - - bool IsInitialized() const override { - if (!predictor_.IsInitialized()) { - return false; - } - if (!this->mesh_data().IsInitialized()) { - return false; - } - return true; - } - - int GetNumParentAttributes() const override { return 1; } - - GeometryAttribute::Type GetParentAttributeType(int i) const override { - DRACO_DCHECK_EQ(i, 0); - (void)i; - return GeometryAttribute::POSITION; - } - - bool SetParentAttribute(const PointAttribute *att) override { - if (att->attribute_type() != GeometryAttribute::POSITION) { - return false; // Invalid attribute type. - } - if (att->num_components() != 3) { - return false; // Currently works only for 3 component positions. - } - predictor_.SetPositionAttribute(*att); - return true; - } - - private: - MeshPredictionSchemeTexCoordsPortablePredictor - predictor_; -}; - -template -bool MeshPredictionSchemeTexCoordsPortableEncoder:: - ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, - int size, int num_components, - const PointIndex *entry_to_point_id_map) { - predictor_.SetEntryToPointIdMap(entry_to_point_id_map); - this->transform().Init(in_data, size, num_components); - // We start processing from the end because this prediction uses data from - // previous entries that could be overwritten when an entry is processed. - for (int p = - static_cast(this->mesh_data().data_to_corner_map()->size() - 1); - p >= 0; --p) { - const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); - predictor_.template ComputePredictedValue(corner_id, in_data, p); - - const int dst_offset = p * num_components; - this->transform().ComputeCorrection(in_data + dst_offset, - predictor_.predicted_value(), - out_corr + dst_offset); - } - return true; -} - -template -bool MeshPredictionSchemeTexCoordsPortableEncoder< - DataTypeT, TransformT, MeshDataT>::EncodePredictionData(EncoderBuffer - *buffer) { - // Encode the delta-coded orientations using arithmetic coding. - const int32_t num_orientations = predictor_.num_orientations(); - buffer->Encode(num_orientations); - bool last_orientation = true; - RAnsBitEncoder encoder; - encoder.StartEncoding(); - for (int i = 0; i < num_orientations; ++i) { - const bool orientation = predictor_.orientation(i); - encoder.EncodeBit(orientation == last_orientation); - last_orientation = orientation; - } - encoder.EndEncoding(buffer); - return MeshPredictionSchemeEncoder::EncodePredictionData(buffer); -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h deleted file mode 100644 index f05e5dd..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_PREDICTOR_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_PREDICTOR_H_ - -#include - -#include "draco/attributes/point_attribute.h" -#include "draco/core/math_utils.h" -#include "draco/core/vector_d.h" -#include "draco/mesh/corner_table.h" - -namespace draco { - -// Predictor functionality used for portable UV prediction by both encoder and -// decoder. -template -class MeshPredictionSchemeTexCoordsPortablePredictor { - public: - static constexpr int kNumComponents = 2; - - explicit MeshPredictionSchemeTexCoordsPortablePredictor(const MeshDataT &md) - : pos_attribute_(nullptr), - entry_to_point_id_map_(nullptr), - mesh_data_(md) {} - void SetPositionAttribute(const PointAttribute &position_attribute) { - pos_attribute_ = &position_attribute; - } - void SetEntryToPointIdMap(const PointIndex *map) { - entry_to_point_id_map_ = map; - } - bool IsInitialized() const { return pos_attribute_ != nullptr; } - - VectorD GetPositionForEntryId(int entry_id) const { - const PointIndex point_id = entry_to_point_id_map_[entry_id]; - VectorD pos; - pos_attribute_->ConvertValue(pos_attribute_->mapped_index(point_id), - &pos[0]); - return pos; - } - - VectorD GetTexCoordForEntryId(int entry_id, - const DataTypeT *data) const { - const int data_offset = entry_id * kNumComponents; - return VectorD(data[data_offset], data[data_offset + 1]); - } - - // Computes predicted UV coordinates on a given corner. The coordinates are - // stored in |predicted_value_| member. - template - bool ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data, - int data_id); - - const DataTypeT *predicted_value() const { return predicted_value_; } - bool orientation(int i) const { return orientations_[i]; } - void set_orientation(int i, bool v) { orientations_[i] = v; } - size_t num_orientations() const { return orientations_.size(); } - void ResizeOrientations(int num_orientations) { - orientations_.resize(num_orientations); - } - - private: - const PointAttribute *pos_attribute_; - const PointIndex *entry_to_point_id_map_; - DataTypeT predicted_value_[kNumComponents]; - // Encoded / decoded array of UV flips. - // TODO(ostava): We should remove this and replace this with in-place encoding - // and decoding to avoid unnecessary copy. - std::vector orientations_; - MeshDataT mesh_data_; -}; - -template -template -bool MeshPredictionSchemeTexCoordsPortablePredictor< - DataTypeT, MeshDataT>::ComputePredictedValue(CornerIndex corner_id, - const DataTypeT *data, - int data_id) { - // Compute the predicted UV coordinate from the positions on all corners - // of the processed triangle. For the best prediction, the UV coordinates - // on the next/previous corners need to be already encoded/decoded. - const CornerIndex next_corner_id = mesh_data_.corner_table()->Next(corner_id); - const CornerIndex prev_corner_id = - mesh_data_.corner_table()->Previous(corner_id); - // Get the encoded data ids from the next and previous corners. - // The data id is the encoding order of the UV coordinates. - int next_data_id, prev_data_id; - - int next_vert_id, prev_vert_id; - next_vert_id = mesh_data_.corner_table()->Vertex(next_corner_id).value(); - prev_vert_id = mesh_data_.corner_table()->Vertex(prev_corner_id).value(); - - next_data_id = mesh_data_.vertex_to_data_map()->at(next_vert_id); - prev_data_id = mesh_data_.vertex_to_data_map()->at(prev_vert_id); - - if (prev_data_id < data_id && next_data_id < data_id) { - // Both other corners have available UV coordinates for prediction. - const VectorD n_uv = GetTexCoordForEntryId(next_data_id, data); - const VectorD p_uv = GetTexCoordForEntryId(prev_data_id, data); - if (p_uv == n_uv) { - // We cannot do a reliable prediction on degenerated UV triangles. - predicted_value_[0] = p_uv[0]; - predicted_value_[1] = p_uv[1]; - return true; - } - - // Get positions at all corners. - const VectorD tip_pos = GetPositionForEntryId(data_id); - const VectorD next_pos = GetPositionForEntryId(next_data_id); - const VectorD prev_pos = GetPositionForEntryId(prev_data_id); - // We use the positions of the above triangle to predict the texture - // coordinate on the tip corner C. - // To convert the triangle into the UV coordinate system we first compute - // position X on the vector |prev_pos - next_pos| that is the projection of - // point C onto vector |prev_pos - next_pos|: - // - // C - // /. \ - // / . \ - // / . \ - // N---X----------P - // - // Where next_pos is point (N), prev_pos is point (P) and tip_pos is the - // position of predicted coordinate (C). - // - const VectorD pn = prev_pos - next_pos; - const uint64_t pn_norm2_squared = pn.SquaredNorm(); - if (pn_norm2_squared != 0) { - // Compute the projection of C onto PN by computing dot product of CN with - // PN and normalizing it by length of PN. This gives us a factor |s| where - // |s = PN.Dot(CN) / PN.SquaredNorm2()|. This factor can be used to - // compute X in UV space |X_UV| as |X_UV = N_UV + s * PN_UV|. - const VectorD cn = tip_pos - next_pos; - const int64_t cn_dot_pn = pn.Dot(cn); - - const VectorD pn_uv = p_uv - n_uv; - // Because we perform all computations with integers, we don't explicitly - // compute the normalized factor |s|, but rather we perform all operations - // over UV vectors in a non-normalized coordinate system scaled with a - // scaling factor |pn_norm2_squared|: - // - // x_uv = X_UV * PN.Norm2Squared() - // - const VectorD x_uv = - n_uv * pn_norm2_squared + (cn_dot_pn * pn_uv); - - const int64_t pn_absmax_element = - std::max(std::max(std::abs(pn[0]), std::abs(pn[1])), std::abs(pn[2])); - if (cn_dot_pn > std::numeric_limits::max() / pn_absmax_element) { - // return false if squared length calculation would overflow. - return false; - } - - // Compute squared length of vector CX in position coordinate system: - const VectorD x_pos = - next_pos + (cn_dot_pn * pn) / pn_norm2_squared; - const uint64_t cx_norm2_squared = (tip_pos - x_pos).SquaredNorm(); - - // Compute vector CX_UV in the uv space by rotating vector PN_UV by 90 - // degrees and scaling it with factor CX.Norm2() / PN.Norm2(): - // - // CX_UV = (CX.Norm2() / PN.Norm2()) * Rot(PN_UV) - // - // To preserve precision, we perform all operations in scaled space as - // explained above, so we want the final vector to be: - // - // cx_uv = CX_UV * PN.Norm2Squared() - // - // We can then rewrite the formula as: - // - // cx_uv = CX.Norm2() * PN.Norm2() * Rot(PN_UV) - // - VectorD cx_uv(pn_uv[1], -pn_uv[0]); // Rotated PN_UV. - // Compute CX.Norm2() * PN.Norm2() - const uint64_t norm_squared = - IntSqrt(cx_norm2_squared * pn_norm2_squared); - // Final cx_uv in the scaled coordinate space. - cx_uv = cx_uv * norm_squared; - - // Predicted uv coordinate is then computed by either adding or - // subtracting CX_UV to/from X_UV. - VectorD predicted_uv; - if (is_encoder_t) { - // When encoding, compute both possible vectors and determine which one - // results in a better prediction. - // Both vectors need to be transformed back from the scaled space to - // the real UV coordinate space. - const VectorD predicted_uv_0((x_uv + cx_uv) / - pn_norm2_squared); - const VectorD predicted_uv_1((x_uv - cx_uv) / - pn_norm2_squared); - const VectorD c_uv = GetTexCoordForEntryId(data_id, data); - if ((c_uv - predicted_uv_0).SquaredNorm() < - (c_uv - predicted_uv_1).SquaredNorm()) { - predicted_uv = predicted_uv_0; - orientations_.push_back(true); - } else { - predicted_uv = predicted_uv_1; - orientations_.push_back(false); - } - } else { - // When decoding the data, we already know which orientation to use. - if (orientations_.empty()) { - return false; - } - const bool orientation = orientations_.back(); - orientations_.pop_back(); - if (orientation) { - predicted_uv = (x_uv + cx_uv) / pn_norm2_squared; - } else { - predicted_uv = (x_uv - cx_uv) / pn_norm2_squared; - } - } - predicted_value_[0] = static_cast(predicted_uv[0]); - predicted_value_[1] = static_cast(predicted_uv[1]); - return true; - } - } - // Else we don't have available textures on both corners or the position data - // is invalid. For such cases we can't use positions for predicting the uv - // value and we resort to delta coding. - int data_offset = 0; - if (prev_data_id < data_id) { - // Use the value on the previous corner as the prediction. - data_offset = prev_data_id * kNumComponents; - } - if (next_data_id < data_id) { - // Use the value on the next corner as the prediction. - data_offset = next_data_id * kNumComponents; - } else { - // None of the other corners have a valid value. Use the last encoded value - // as the prediction if possible. - if (data_id > 0) { - data_offset = (data_id - 1) * kNumComponents; - } else { - // We are encoding the first value. Predict 0. - for (int i = 0; i < kNumComponents; ++i) { - predicted_value_[i] = 0; - } - return true; - } - } - for (int i = 0; i < kNumComponents; ++i) { - predicted_value_[i] = data[data_offset + i]; - } - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_PORTABLE_PREDICTOR_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h deleted file mode 100644 index 064e1b4..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_H_ - -#include - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h" - -// Prediction schemes can be used during encoding and decoding of vertex -// attributes to predict attribute values based on the previously -// encoded/decoded data. The differences between the original and predicted -// attribute values are used to compute correction values that can be usually -// encoded with fewer bits compared to the original data. -namespace draco { - -// Abstract base class for typed prediction schemes. It provides basic access -// to the encoded attribute and to the supplied prediction transform. -template > -class PredictionSchemeDecoder : public PredictionSchemeTypedDecoderInterface< - DataTypeT, typename TransformT::CorrType> { - public: - typedef DataTypeT DataType; - typedef TransformT Transform; - // Correction type needs to be defined in the prediction transform class. - typedef typename Transform::CorrType CorrType; - explicit PredictionSchemeDecoder(const PointAttribute *attribute) - : PredictionSchemeDecoder(attribute, Transform()) {} - PredictionSchemeDecoder(const PointAttribute *attribute, - const Transform &transform) - : attribute_(attribute), transform_(transform) {} - - bool DecodePredictionData(DecoderBuffer *buffer) override { - if (!transform_.DecodeTransformData(buffer)) { - return false; - } - return true; - } - - const PointAttribute *GetAttribute() const override { return attribute(); } - - // Returns the number of parent attributes that are needed for the prediction. - int GetNumParentAttributes() const override { return 0; } - - // Returns the type of each of the parent attribute. - GeometryAttribute::Type GetParentAttributeType(int /* i */) const override { - return GeometryAttribute::INVALID; - } - - // Sets the required parent attribute. - bool SetParentAttribute(const PointAttribute * /* att */) override { - return false; - } - - bool AreCorrectionsPositive() override { - return transform_.AreCorrectionsPositive(); - } - - PredictionSchemeTransformType GetTransformType() const override { - return transform_.GetType(); - } - - protected: - inline const PointAttribute *attribute() const { return attribute_; } - inline const Transform &transform() const { return transform_; } - inline Transform &transform() { return transform_; } - - private: - const PointAttribute *attribute_; - Transform transform_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h deleted file mode 100644 index cf2a6ba..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Functions for creating prediction schemes for decoders using the provided -// prediction method id. - -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_FACTORY_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_FACTORY_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h" -#include "draco/draco_features.h" -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h" -#endif -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_decoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h" -#include "draco/compression/mesh/mesh_decoder.h" - -namespace draco { - -// Factory class for creating mesh prediction schemes. The factory implements -// operator() that is used to create an appropriate mesh prediction scheme in -// CreateMeshPredictionScheme() function in prediction_scheme_factory.h -template -struct MeshPredictionSchemeDecoderFactory { - // Operator () specialized for the wrap transform. Wrap transform can be used - // for all mesh prediction schemes. The specialization is done in compile time - // to prevent instantiations of unneeded combinations of prediction schemes + - // prediction transforms. - template - struct DispatchFunctor { - std::unique_ptr> operator()( - PredictionSchemeMethod method, const PointAttribute *attribute, - const TransformT &transform, const MeshDataT &mesh_data, - uint16_t bitstream_version) { - if (method == MESH_PREDICTION_PARALLELOGRAM) { - return std::unique_ptr>( - new MeshPredictionSchemeParallelogramDecoder( - attribute, transform, mesh_data)); - } -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - else if (method == MESH_PREDICTION_MULTI_PARALLELOGRAM) { - return std::unique_ptr>( - new MeshPredictionSchemeMultiParallelogramDecoder< - DataTypeT, TransformT, MeshDataT>(attribute, transform, - mesh_data)); - } -#endif - else if (method == MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM) { - return std::unique_ptr>( - new MeshPredictionSchemeConstrainedMultiParallelogramDecoder< - DataTypeT, TransformT, MeshDataT>(attribute, transform, - mesh_data)); - } -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - else if (method == MESH_PREDICTION_TEX_COORDS_DEPRECATED) { - return std::unique_ptr>( - new MeshPredictionSchemeTexCoordsDecoder( - attribute, transform, mesh_data, bitstream_version)); - } -#endif - else if (method == MESH_PREDICTION_TEX_COORDS_PORTABLE) { - return std::unique_ptr>( - new MeshPredictionSchemeTexCoordsPortableDecoder< - DataTypeT, TransformT, MeshDataT>(attribute, transform, - mesh_data)); - } -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED - else if (method == MESH_PREDICTION_GEOMETRIC_NORMAL) { - return std::unique_ptr>( - new MeshPredictionSchemeGeometricNormalDecoder< - DataTypeT, TransformT, MeshDataT>(attribute, transform, - mesh_data)); - } -#endif - return nullptr; - } - }; - -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED - // Operator () specialized for normal octahedron transforms. These transforms - // are currently used only by the geometric normal prediction scheme (the - // transform is also used by delta coding, but delta predictor is not - // constructed in this function). - template - struct DispatchFunctor { - std::unique_ptr> operator()( - PredictionSchemeMethod method, const PointAttribute *attribute, - const TransformT &transform, const MeshDataT &mesh_data, - uint16_t bitstream_version) { - if (method == MESH_PREDICTION_GEOMETRIC_NORMAL) { - return std::unique_ptr>( - new MeshPredictionSchemeGeometricNormalDecoder< - DataTypeT, TransformT, MeshDataT>(attribute, transform, - mesh_data)); - } - return nullptr; - } - }; - template - struct DispatchFunctor { - std::unique_ptr> operator()( - PredictionSchemeMethod method, const PointAttribute *attribute, - const TransformT &transform, const MeshDataT &mesh_data, - uint16_t bitstream_version) { - if (method == MESH_PREDICTION_GEOMETRIC_NORMAL) { - return std::unique_ptr>( - new MeshPredictionSchemeGeometricNormalDecoder< - DataTypeT, TransformT, MeshDataT>(attribute, transform, - mesh_data)); - } - return nullptr; - } - }; -#endif - - template - std::unique_ptr> operator()( - PredictionSchemeMethod method, const PointAttribute *attribute, - const TransformT &transform, const MeshDataT &mesh_data, - uint16_t bitstream_version) { - return DispatchFunctor()( - method, attribute, transform, mesh_data, bitstream_version); - } -}; - -// Creates a prediction scheme for a given decoder and given prediction method. -// The prediction schemes are automatically initialized with decoder specific -// data if needed. -template -std::unique_ptr> -CreatePredictionSchemeForDecoder(PredictionSchemeMethod method, int att_id, - const PointCloudDecoder *decoder, - const TransformT &transform) { - if (method == PREDICTION_NONE) { - return nullptr; - } - const PointAttribute *const att = decoder->point_cloud()->attribute(att_id); - if (decoder->GetGeometryType() == TRIANGULAR_MESH) { - // Cast the decoder to mesh decoder. This is not necessarily safe if there - // is some other decoder decides to use TRIANGULAR_MESH as the return type, - // but unfortunately there is not nice work around for this without using - // RTTI (double dispatch and similar concepts will not work because of the - // template nature of the prediction schemes). - const MeshDecoder *const mesh_decoder = - static_cast(decoder); - - auto ret = CreateMeshPredictionScheme< - MeshDecoder, PredictionSchemeDecoder, - MeshPredictionSchemeDecoderFactory>( - mesh_decoder, method, att_id, transform, decoder->bitstream_version()); - if (ret) { - return ret; - } - // Otherwise try to create another prediction scheme. - } - // Create delta decoder. - return std::unique_ptr>( - new PredictionSchemeDeltaDecoder(att, transform)); -} - -// Create a prediction scheme using a default transform constructor. -template -std::unique_ptr> -CreatePredictionSchemeForDecoder(PredictionSchemeMethod method, int att_id, - const PointCloudDecoder *decoder) { - return CreatePredictionSchemeForDecoder( - method, att_id, decoder, TransformT()); -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_FACTORY_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h deleted file mode 100644 index 6f19f7f..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_INTERFACE_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_INTERFACE_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h" -#include "draco/core/decoder_buffer.h" - -// Prediction schemes can be used during encoding and decoding of attributes -// to predict attribute values based on the previously encoded/decoded data. -// See prediction_scheme.h for more details. -namespace draco { - -// Abstract interface for all prediction schemes used during attribute encoding. -class PredictionSchemeDecoderInterface : public PredictionSchemeInterface { - public: - // Method that can be used to decode any prediction scheme specific data - // from the input buffer. - virtual bool DecodePredictionData(DecoderBuffer *buffer) = 0; -}; - -// A specialized version of the prediction scheme interface for specific -// input and output data types. -// |entry_to_point_id_map| is the mapping between value entries to point ids -// of the associated point cloud, where one entry is defined as |num_components| -// values of the |in_data|. -// DataTypeT is the data type of input and predicted values. -// CorrTypeT is the data type used for storing corrected values. -template -class PredictionSchemeTypedDecoderInterface - : public PredictionSchemeDecoderInterface { - public: - // Reverts changes made by the prediction scheme during encoding. - virtual bool ComputeOriginalValues( - const CorrTypeT *in_corr, DataTypeT *out_data, int size, - int num_components, const PointIndex *entry_to_point_id_map) = 0; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODER_INTERFACE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h deleted file mode 100644 index 47c1532..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODING_TRANSFORM_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODING_TRANSFORM_H_ - -#include "draco/compression/config/compression_shared.h" -#include "draco/core/decoder_buffer.h" - -namespace draco { - -// PredictionSchemeDecodingTransform is used to transform predicted values and -// correction values into the final original attribute values. -// DataTypeT is the data type of predicted values. -// CorrTypeT is the data type used for storing corrected values. It allows -// transforms to store corrections into a different type or format compared to -// the predicted data. -template -class PredictionSchemeDecodingTransform { - public: - typedef CorrTypeT CorrType; - PredictionSchemeDecodingTransform() : num_components_(0) {} - - void Init(int num_components) { num_components_ = num_components; } - - // Computes the original value from the input predicted value and the decoded - // corrections. The default implementation is equal to std:plus. - inline void ComputeOriginalValue(const DataTypeT *predicted_vals, - const CorrTypeT *corr_vals, - DataTypeT *out_original_vals) const { - static_assert(std::is_same::value, - "For the default prediction transform, correction and input " - "data must be of the same type."); - for (int i = 0; i < num_components_; ++i) { - out_original_vals[i] = predicted_vals[i] + corr_vals[i]; - } - } - - // Decodes any transform specific data. Called before Init() method. - bool DecodeTransformData(DecoderBuffer * /* buffer */) { return true; } - - // Should return true if all corrected values are guaranteed to be positive. - bool AreCorrectionsPositive() const { return false; } - - protected: - int num_components() const { return num_components_; } - - private: - int num_components_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DECODING_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h deleted file mode 100644 index ae72c71..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DELTA_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DELTA_DECODER_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h" - -namespace draco { - -// Decoder for values encoded with delta coding. See the corresponding encoder -// for more details. -template -class PredictionSchemeDeltaDecoder - : public PredictionSchemeDecoder { - public: - using CorrType = - typename PredictionSchemeDecoder::CorrType; - // Initialized the prediction scheme. - explicit PredictionSchemeDeltaDecoder(const PointAttribute *attribute) - : PredictionSchemeDecoder(attribute) {} - PredictionSchemeDeltaDecoder(const PointAttribute *attribute, - const TransformT &transform) - : PredictionSchemeDecoder(attribute, transform) {} - - bool ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, - int size, int num_components, - const PointIndex *entry_to_point_id_map) override; - PredictionSchemeMethod GetPredictionMethod() const override { - return PREDICTION_DIFFERENCE; - } - bool IsInitialized() const override { return true; } -}; - -template -bool PredictionSchemeDeltaDecoder::ComputeOriginalValues( - const CorrType *in_corr, DataTypeT *out_data, int size, int num_components, - const PointIndex *) { - this->transform().Init(num_components); - // Decode the original value for the first element. - std::unique_ptr zero_vals(new DataTypeT[num_components]()); - this->transform().ComputeOriginalValue(zero_vals.get(), in_corr, out_data); - - // Decode data from the front using D(i) = D(i) + D(i - 1). - for (int i = num_components; i < size; i += num_components) { - this->transform().ComputeOriginalValue(out_data + i - num_components, - in_corr + i, out_data + i); - } - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DELTA_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h deleted file mode 100644 index 324afaf..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DELTA_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DELTA_ENCODER_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h" - -namespace draco { - -// Basic prediction scheme based on computing backward differences between -// stored attribute values (also known as delta-coding). Usually works better -// than the reference point prediction scheme, because nearby values are often -// encoded next to each other. -template -class PredictionSchemeDeltaEncoder - : public PredictionSchemeEncoder { - public: - using CorrType = - typename PredictionSchemeEncoder::CorrType; - // Initialized the prediction scheme. - explicit PredictionSchemeDeltaEncoder(const PointAttribute *attribute) - : PredictionSchemeEncoder(attribute) {} - PredictionSchemeDeltaEncoder(const PointAttribute *attribute, - const TransformT &transform) - : PredictionSchemeEncoder(attribute, transform) {} - - bool ComputeCorrectionValues( - const DataTypeT *in_data, CorrType *out_corr, int size, - int num_components, const PointIndex *entry_to_point_id_map) override; - PredictionSchemeMethod GetPredictionMethod() const override { - return PREDICTION_DIFFERENCE; - } - bool IsInitialized() const override { return true; } -}; - -template -bool PredictionSchemeDeltaEncoder< - DataTypeT, TransformT>::ComputeCorrectionValues(const DataTypeT *in_data, - CorrType *out_corr, - int size, - int num_components, - const PointIndex *) { - this->transform().Init(in_data, size, num_components); - // Encode data from the back using D(i) = D(i) - D(i - 1). - for (int i = size - num_components; i > 0; i -= num_components) { - this->transform().ComputeCorrection( - in_data + i, in_data + i - num_components, out_corr + i); - } - // Encode correction for the first element. - std::unique_ptr zero_vals(new DataTypeT[num_components]()); - this->transform().ComputeCorrection(in_data, zero_vals.get(), out_corr); - return true; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_DELTA_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h deleted file mode 100644 index 2a211a9..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_H_ - -#include - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h" - -// Prediction schemes can be used during encoding and decoding of vertex -// attributes to predict attribute values based on the previously -// encoded/decoded data. The differences between the original and predicted -// attribute values are used to compute correction values that can be usually -// encoded with fewer bits compared to the original data. -namespace draco { - -// Abstract base class for typed prediction schemes. It provides basic access -// to the encoded attribute and to the supplied prediction transform. -template > -class PredictionSchemeEncoder : public PredictionSchemeTypedEncoderInterface< - DataTypeT, typename TransformT::CorrType> { - public: - typedef DataTypeT DataType; - typedef TransformT Transform; - // Correction type needs to be defined in the prediction transform class. - typedef typename Transform::CorrType CorrType; - explicit PredictionSchemeEncoder(const PointAttribute *attribute) - : PredictionSchemeEncoder(attribute, Transform()) {} - PredictionSchemeEncoder(const PointAttribute *attribute, - const Transform &transform) - : attribute_(attribute), transform_(transform) {} - - bool EncodePredictionData(EncoderBuffer *buffer) override { - if (!transform_.EncodeTransformData(buffer)) { - return false; - } - return true; - } - - const PointAttribute *GetAttribute() const override { return attribute(); } - - // Returns the number of parent attributes that are needed for the prediction. - int GetNumParentAttributes() const override { return 0; } - - // Returns the type of each of the parent attribute. - GeometryAttribute::Type GetParentAttributeType(int /* i */) const override { - return GeometryAttribute::INVALID; - } - - // Sets the required parent attribute. - bool SetParentAttribute(const PointAttribute * /* att */) override { - return false; - } - - bool AreCorrectionsPositive() override { - return transform_.AreCorrectionsPositive(); - } - - PredictionSchemeTransformType GetTransformType() const override { - return transform_.GetType(); - } - - protected: - inline const PointAttribute *attribute() const { return attribute_; } - inline const Transform &transform() const { return transform_; } - inline Transform &transform() { return transform_; } - - private: - const PointAttribute *attribute_; - Transform transform_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc deleted file mode 100644 index f410a6c..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h" - -namespace draco { - -PredictionSchemeMethod SelectPredictionMethod( - int att_id, const PointCloudEncoder *encoder) { - if (encoder->options()->GetSpeed() >= 10) { - // Selected fastest, though still doing some compression. - return PREDICTION_DIFFERENCE; - } - if (encoder->GetGeometryType() == TRIANGULAR_MESH) { - // Use speed setting to select the best encoding method. - const PointAttribute *const att = encoder->point_cloud()->attribute(att_id); - if (att->attribute_type() == GeometryAttribute::TEX_COORD) { - if (encoder->options()->GetSpeed() < 4) { - // Use texture coordinate prediction for speeds 0, 1, 2, 3. - return MESH_PREDICTION_TEX_COORDS_PORTABLE; - } - } - if (att->attribute_type() == GeometryAttribute::NORMAL) { -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED - if (encoder->options()->GetSpeed() < 4) { - // Use geometric normal prediction for speeds 0, 1, 2, 3. - // For this prediction, the position attribute needs to be either - // integer or quantized as well. - const int pos_att_id = encoder->point_cloud()->GetNamedAttributeId( - GeometryAttribute::POSITION); - const PointAttribute *const pos_att = - encoder->point_cloud()->GetNamedAttribute( - GeometryAttribute::POSITION); - if (pos_att && (IsDataTypeIntegral(pos_att->data_type()) || - encoder->options()->GetAttributeInt( - pos_att_id, "quantization_bits", -1) > 0)) { - return MESH_PREDICTION_GEOMETRIC_NORMAL; - } - } -#endif - return PREDICTION_DIFFERENCE; // default - } - // Handle other attribute types. - if (encoder->options()->GetSpeed() >= 8) { - return PREDICTION_DIFFERENCE; - } - if (encoder->options()->GetSpeed() >= 2 || - encoder->point_cloud()->num_points() < 40) { - // Parallelogram prediction is used for speeds 2 - 7 or when the overhead - // of using constrained multi-parallelogram would be too high. - return MESH_PREDICTION_PARALLELOGRAM; - } - // Multi-parallelogram is used for speeds 0, 1. - return MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM; - } - // Default option is delta coding. - return PREDICTION_DIFFERENCE; -} - -// Returns the preferred prediction scheme based on the encoder options. -PredictionSchemeMethod GetPredictionMethodFromOptions( - int att_id, const EncoderOptions &options) { - const int pred_type = - options.GetAttributeInt(att_id, "prediction_scheme", -1); - if (pred_type == -1) { - return PREDICTION_UNDEFINED; - } - if (pred_type < 0 || pred_type >= NUM_PREDICTION_SCHEMES) { - return PREDICTION_NONE; - } - return static_cast(pred_type); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h deleted file mode 100644 index 40a7683..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Functions for creating prediction schemes for encoders using the provided -// prediction method id. - -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_FACTORY_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_FACTORY_H_ - -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h" -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h" -#endif -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h" -#include "draco/compression/mesh/mesh_encoder.h" - -namespace draco { - -// Selects a prediction method based on the input geometry type and based on the -// encoder options. -PredictionSchemeMethod SelectPredictionMethod(int att_id, - const PointCloudEncoder *encoder); - -// Factory class for creating mesh prediction schemes. -template -struct MeshPredictionSchemeEncoderFactory { - template - std::unique_ptr> operator()( - PredictionSchemeMethod method, const PointAttribute *attribute, - const TransformT &transform, const MeshDataT &mesh_data, - uint16_t bitstream_version) { - if (method == MESH_PREDICTION_PARALLELOGRAM) { - return std::unique_ptr>( - new MeshPredictionSchemeParallelogramEncoder( - attribute, transform, mesh_data)); - } else if (method == MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM) { - return std::unique_ptr>( - new MeshPredictionSchemeConstrainedMultiParallelogramEncoder< - DataTypeT, TransformT, MeshDataT>(attribute, transform, - mesh_data)); - } else if (method == MESH_PREDICTION_TEX_COORDS_PORTABLE) { - return std::unique_ptr>( - new MeshPredictionSchemeTexCoordsPortableEncoder< - DataTypeT, TransformT, MeshDataT>(attribute, transform, - mesh_data)); - } -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED - else if (method == MESH_PREDICTION_GEOMETRIC_NORMAL) { - return std::unique_ptr>( - new MeshPredictionSchemeGeometricNormalEncoder( - attribute, transform, mesh_data)); - } -#endif - return nullptr; - } -}; - -// Creates a prediction scheme for a given encoder and given prediction method. -// The prediction schemes are automatically initialized with encoder specific -// data if needed. -template -std::unique_ptr> -CreatePredictionSchemeForEncoder(PredictionSchemeMethod method, int att_id, - const PointCloudEncoder *encoder, - const TransformT &transform) { - const PointAttribute *const att = encoder->point_cloud()->attribute(att_id); - if (method == PREDICTION_UNDEFINED) { - method = SelectPredictionMethod(att_id, encoder); - } - if (method == PREDICTION_NONE) { - return nullptr; // No prediction is used. - } - if (encoder->GetGeometryType() == TRIANGULAR_MESH) { - // Cast the encoder to mesh encoder. This is not necessarily safe if there - // is some other encoder decides to use TRIANGULAR_MESH as the return type, - // but unfortunately there is not nice work around for this without using - // RTTI (double dispatch and similar concepts will not work because of the - // template nature of the prediction schemes). - const MeshEncoder *const mesh_encoder = - static_cast(encoder); - auto ret = CreateMeshPredictionScheme< - MeshEncoder, PredictionSchemeEncoder, - MeshPredictionSchemeEncoderFactory>( - mesh_encoder, method, att_id, transform, kDracoMeshBitstreamVersion); - if (ret) { - return ret; - } - // Otherwise try to create another prediction scheme. - } - // Create delta encoder. - return std::unique_ptr>( - new PredictionSchemeDeltaEncoder(att, transform)); -} - -// Create a prediction scheme using a default transform constructor. -template -std::unique_ptr> -CreatePredictionSchemeForEncoder(PredictionSchemeMethod method, int att_id, - const PointCloudEncoder *encoder) { - return CreatePredictionSchemeForEncoder( - method, att_id, encoder, TransformT()); -} - -// Returns the preferred prediction scheme based on the encoder options. -PredictionSchemeMethod GetPredictionMethodFromOptions( - int att_id, const EncoderOptions &options); - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_FACTORY_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h deleted file mode 100644 index 37aa9f7..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_INTERFACE_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_INTERFACE_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h" -#include "draco/core/encoder_buffer.h" - -// Prediction schemes can be used during encoding and decoding of attributes -// to predict attribute values based on the previously encoded/decoded data. -// See prediction_scheme.h for more details. -namespace draco { - -// Abstract interface for all prediction schemes used during attribute encoding. -class PredictionSchemeEncoderInterface : public PredictionSchemeInterface { - public: - // Method that can be used to encode any prediction scheme specific data - // into the output buffer. - virtual bool EncodePredictionData(EncoderBuffer *buffer) = 0; -}; - -// A specialized version of the prediction scheme interface for specific -// input and output data types. -// |entry_to_point_id_map| is the mapping between value entries to point ids -// of the associated point cloud, where one entry is defined as |num_components| -// values of the |in_data|. -// DataTypeT is the data type of input and predicted values. -// CorrTypeT is the data type used for storing corrected values. -template -class PredictionSchemeTypedEncoderInterface - : public PredictionSchemeEncoderInterface { - public: - // Applies the prediction scheme when encoding the attribute. - // |in_data| contains value entries to be encoded. - // |out_corr| is an output array containing the to be encoded corrections. - virtual bool ComputeCorrectionValues( - const DataTypeT *in_data, CorrTypeT *out_corr, int size, - int num_components, const PointIndex *entry_to_point_id_map) = 0; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_INTERFACE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h deleted file mode 100644 index 0929492..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODING_TRANSFORM_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODING_TRANSFORM_H_ - -#include "draco/compression/config/compression_shared.h" -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// PredictionSchemeEncodingTransform is used to transform predicted values into -// correction values. -// CorrTypeT is the data type used for storing corrected values. It allows -// transforms to store corrections into a different type or format compared to -// the predicted data. -template -class PredictionSchemeEncodingTransform { - public: - typedef CorrTypeT CorrType; - PredictionSchemeEncodingTransform() : num_components_(0) {} - - PredictionSchemeTransformType GetType() const { - return PREDICTION_TRANSFORM_DELTA; - } - - // Performs any custom initialization of the transform for the encoder. - // |size| = total number of values in |orig_data| (i.e., number of entries * - // number of components). - void Init(const DataTypeT * /* orig_data */, int /* size */, - int num_components) { - num_components_ = num_components; - } - - // Computes the corrections based on the input original values and the - // predicted values. The correction is always computed for all components - // of the input element. |val_id| is the id of the input value - // (i.e., element_id * num_components). The default implementation is equal to - // std::minus. - inline void ComputeCorrection(const DataTypeT *original_vals, - const DataTypeT *predicted_vals, - CorrTypeT *out_corr_vals) { - static_assert(std::is_same::value, - "For the default prediction transform, correction and input " - "data must be of the same type."); - for (int i = 0; i < num_components_; ++i) { - out_corr_vals[i] = original_vals[i] - predicted_vals[i]; - } - } - - // Encode any transform specific data. - bool EncodeTransformData(EncoderBuffer * /* buffer */) { return true; } - - // Should return true if all corrected values are guaranteed to be positive. - bool AreCorrectionsPositive() const { return false; } - - protected: - int num_components() const { return num_components_; } - - private: - int num_components_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODING_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h deleted file mode 100644 index b36c4c8..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Functions for creating prediction schemes from a provided prediction method -// name. The functions in this file can create only basic prediction schemes -// that don't require any encoder or decoder specific data. To create more -// sophisticated prediction schemes, use functions from either -// prediction_scheme_encoder_factory.h or, -// prediction_scheme_decoder_factory.h. - -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_FACTORY_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_FACTORY_H_ - -#include "draco/compression/attributes/mesh_attribute_indices_encoding_data.h" -#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h" -#include "draco/compression/config/compression_shared.h" -#include "draco/mesh/mesh_attribute_corner_table.h" - -namespace draco { - -template -std::unique_ptr CreateMeshPredictionScheme( - const EncodingDataSourceT *source, PredictionSchemeMethod method, - int att_id, const typename PredictionSchemeT::Transform &transform, - uint16_t bitstream_version) { - const PointAttribute *const att = source->point_cloud()->attribute(att_id); - if (source->GetGeometryType() == TRIANGULAR_MESH && - (method == MESH_PREDICTION_PARALLELOGRAM || - method == MESH_PREDICTION_MULTI_PARALLELOGRAM || - method == MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM || - method == MESH_PREDICTION_TEX_COORDS_PORTABLE || - method == MESH_PREDICTION_GEOMETRIC_NORMAL || - method == MESH_PREDICTION_TEX_COORDS_DEPRECATED)) { - const CornerTable *const ct = source->GetCornerTable(); - const MeshAttributeIndicesEncodingData *const encoding_data = - source->GetAttributeEncodingData(att_id); - if (ct == nullptr || encoding_data == nullptr) { - // No connectivity data found. - return nullptr; - } - // Connectivity data exists. - const MeshAttributeCornerTable *const att_ct = - source->GetAttributeCornerTable(att_id); - if (att_ct != nullptr) { - typedef MeshPredictionSchemeData MeshData; - MeshData md; - md.Set(source->mesh(), att_ct, - &encoding_data->encoded_attribute_value_index_to_corner_map, - &encoding_data->vertex_to_encoded_attribute_value_index_map); - MeshPredictionSchemeFactoryT factory; - auto ret = factory(method, att, transform, md, bitstream_version); - if (ret) { - return ret; - } - } else { - typedef MeshPredictionSchemeData MeshData; - MeshData md; - md.Set(source->mesh(), ct, - &encoding_data->encoded_attribute_value_index_to_corner_map, - &encoding_data->vertex_to_encoded_attribute_value_index_map); - MeshPredictionSchemeFactoryT factory; - auto ret = factory(method, att, transform, md, bitstream_version); - if (ret) { - return ret; - } - } - } - return nullptr; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_FACTORY_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h deleted file mode 100644 index c9b3706..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_INTERFACE_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_INTERFACE_H_ - -#include "draco/attributes/point_attribute.h" -#include "draco/compression/config/compression_shared.h" - -// Prediction schemes can be used during encoding and decoding of attributes -// to predict attribute values based on the previously encoded/decoded data. -// See prediction_scheme.h for more details. -namespace draco { - -// Abstract interface for all prediction schemes used during attribute encoding. -class PredictionSchemeInterface { - public: - virtual ~PredictionSchemeInterface() = default; - virtual PredictionSchemeMethod GetPredictionMethod() const = 0; - - // Returns the encoded attribute. - virtual const PointAttribute *GetAttribute() const = 0; - - // Returns true when the prediction scheme is initialized with all data it - // needs. - virtual bool IsInitialized() const = 0; - - // Returns the number of parent attributes that are needed for the prediction. - virtual int GetNumParentAttributes() const = 0; - - // Returns the type of each of the parent attribute. - virtual GeometryAttribute::Type GetParentAttributeType(int i) const = 0; - - // Sets the required parent attribute. - // Returns false if the attribute doesn't meet the requirements of the - // prediction scheme. - virtual bool SetParentAttribute(const PointAttribute *att) = 0; - - // Method should return true if the prediction scheme guarantees that all - // correction values are always positive (or at least non-negative). - virtual bool AreCorrectionsPositive() = 0; - - // Returns the transform type used by the prediction scheme. - virtual PredictionSchemeTransformType GetTransformType() const = 0; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_INTERFACE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h deleted file mode 100644 index 5a6c7c2..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_DECODING_TRANSFORM_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_DECODING_TRANSFORM_H_ - -#include - -#include "draco/compression/attributes/normal_compression_utils.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h" -#include "draco/core/decoder_buffer.h" -#include "draco/core/macros.h" -#include "draco/core/vector_d.h" - -namespace draco { - -// Class for converting correction values transformed by the canonicalized -// normal octahedron transform back to the original values. See the -// corresponding encoder for more details. -template -class PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform - : public PredictionSchemeNormalOctahedronCanonicalizedTransformBase< - DataTypeT> { - public: - typedef VectorD Point2; - typedef DataTypeT CorrType; - typedef DataTypeT DataType; - - PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform() {} - - // Dummy to fulfill concept. - void Init(int num_components) {} - - bool DecodeTransformData(DecoderBuffer *buffer) { - DataTypeT max_quantized_value, center_value; - if (!buffer->Decode(&max_quantized_value)) { - return false; - } - if (!buffer->Decode(¢er_value)) { - return false; - } - (void)center_value; - if (!this->set_max_quantized_value(max_quantized_value)) { - return false; - } - // Account for reading wrong values, e.g., due to fuzzing. - if (this->quantization_bits() < 2) { - return false; - } - if (this->quantization_bits() > 30) { - return false; - } - return true; - } - - inline void ComputeOriginalValue(const DataType *pred_vals, - const CorrType *corr_vals, - DataType *out_orig_vals) const { - DRACO_DCHECK_LE(pred_vals[0], 2 * this->center_value()); - DRACO_DCHECK_LE(pred_vals[1], 2 * this->center_value()); - DRACO_DCHECK_LE(corr_vals[0], 2 * this->center_value()); - DRACO_DCHECK_LE(corr_vals[1], 2 * this->center_value()); - - DRACO_DCHECK_LE(0, pred_vals[0]); - DRACO_DCHECK_LE(0, pred_vals[1]); - DRACO_DCHECK_LE(0, corr_vals[0]); - DRACO_DCHECK_LE(0, corr_vals[1]); - - const Point2 pred = Point2(pred_vals[0], pred_vals[1]); - const Point2 corr = Point2(corr_vals[0], corr_vals[1]); - const Point2 orig = ComputeOriginalValue(pred, corr); - - out_orig_vals[0] = orig[0]; - out_orig_vals[1] = orig[1]; - } - - private: - Point2 ComputeOriginalValue(Point2 pred, Point2 corr) const { - const Point2 t(this->center_value(), this->center_value()); - pred = pred - t; - const bool pred_is_in_diamond = this->IsInDiamond(pred[0], pred[1]); - if (!pred_is_in_diamond) { - this->InvertDiamond(&pred[0], &pred[1]); - } - const bool pred_is_in_bottom_left = this->IsInBottomLeft(pred); - const int32_t rotation_count = this->GetRotationCount(pred); - if (!pred_is_in_bottom_left) { - pred = this->RotatePoint(pred, rotation_count); - } - Point2 orig = pred + corr; - orig[0] = this->ModMax(orig[0]); - orig[1] = this->ModMax(orig[1]); - if (!pred_is_in_bottom_left) { - const int32_t reverse_rotation_count = (4 - rotation_count) % 4; - orig = this->RotatePoint(orig, reverse_rotation_count); - } - if (!pred_is_in_diamond) { - this->InvertDiamond(&orig[0], &orig[1]); - } - orig = orig + t; - return orig; - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_DECODING_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h deleted file mode 100644 index 0dc9696..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_ENCODING_TRANSFORM_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_ENCODING_TRANSFORM_H_ - -#include - -#include "draco/compression/attributes/normal_compression_utils.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h" -#include "draco/core/encoder_buffer.h" -#include "draco/core/macros.h" -#include "draco/core/vector_d.h" - -namespace draco { - -// The transform works on octahedral coordinates for normals. The square is -// subdivided into four inner triangles (diamond) and four outer triangles. The -// inner triangles are associated with the upper part of the octahedron and the -// outer triangles are associated with the lower part. -// Given a prediction value P and the actual value Q that should be encoded, -// this transform first checks if P is outside the diamond. If so, the outer -// triangles are flipped towards the inside and vice versa. Then it checks if p -// is in the bottom left quadrant. If it is not, it rotates p and q accordingly. -// The actual correction value is then based on the mapped and rotated P and Q -// values. The inversion tends to result in shorter correction vectors and the -// rotation makes it so that all long correction values are positive, reducing -// the possible value range of the correction values and increasing the -// occurrences of positive large correction values, which helps the entropy -// encoder. This is possible since P is also known by the decoder, see also -// ComputeCorrection and ComputeOriginalValue functions. -// Note that the tile is not periodic, which implies that the outer edges can -// not be identified, which requires us to use an odd number of values on each -// axis. -// DataTypeT is expected to be some integral type. -// -template -class PredictionSchemeNormalOctahedronCanonicalizedEncodingTransform - : public PredictionSchemeNormalOctahedronCanonicalizedTransformBase< - DataTypeT> { - public: - typedef PredictionSchemeNormalOctahedronCanonicalizedTransformBase - Base; - typedef VectorD Point2; - typedef DataTypeT CorrType; - typedef DataTypeT DataType; - - // We expect the mod value to be of the form 2^b-1. - explicit PredictionSchemeNormalOctahedronCanonicalizedEncodingTransform( - DataType max_quantized_value) - : Base(max_quantized_value) {} - - // Dummy function to fulfill concept. - void Init(const DataTypeT *orig_data, int size, int num_components) {} - - bool EncodeTransformData(EncoderBuffer *buffer) { - buffer->Encode(this->max_quantized_value()); - buffer->Encode(this->center_value()); - return true; - } - - inline void ComputeCorrection(const DataType *orig_vals, - const DataType *pred_vals, - CorrType *out_corr_vals) const { - DRACO_DCHECK_LE(pred_vals[0], this->center_value() * 2); - DRACO_DCHECK_LE(pred_vals[1], this->center_value() * 2); - DRACO_DCHECK_LE(orig_vals[0], this->center_value() * 2); - DRACO_DCHECK_LE(orig_vals[1], this->center_value() * 2); - DRACO_DCHECK_LE(0, pred_vals[0]); - DRACO_DCHECK_LE(0, pred_vals[1]); - DRACO_DCHECK_LE(0, orig_vals[0]); - DRACO_DCHECK_LE(0, orig_vals[1]); - - const Point2 orig = Point2(orig_vals[0], orig_vals[1]); - const Point2 pred = Point2(pred_vals[0], pred_vals[1]); - const Point2 corr = ComputeCorrection(orig, pred); - - out_corr_vals[0] = corr[0]; - out_corr_vals[1] = corr[1]; - } - - private: - Point2 ComputeCorrection(Point2 orig, Point2 pred) const { - const Point2 t(this->center_value(), this->center_value()); - orig = orig - t; - pred = pred - t; - if (!this->IsInDiamond(pred[0], pred[1])) { - this->InvertDiamond(&orig[0], &orig[1]); - this->InvertDiamond(&pred[0], &pred[1]); - } - if (!this->IsInBottomLeft(pred)) { - const int32_t rotation_count = this->GetRotationCount(pred); - orig = this->RotatePoint(orig, rotation_count); - pred = this->RotatePoint(pred, rotation_count); - } - Point2 corr = orig - pred; - corr[0] = this->MakePositive(corr[0]); - corr[1] = this->MakePositive(corr[1]); - return corr; - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_ENCODING_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h deleted file mode 100644 index 4a1e3a6..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_TRANSFORM_BASE_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_TRANSFORM_BASE_H_ - -#include - -#include "draco/compression/attributes/normal_compression_utils.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h" -#include "draco/compression/config/compression_shared.h" -#include "draco/core/bit_utils.h" -#include "draco/core/macros.h" -#include "draco/core/vector_d.h" - -namespace draco { - -// Base class containing shared functionality used by both encoding and decoding -// canonicalized normal octahedron prediction scheme transforms. See the -// encoding transform for more details about the method. -template -class PredictionSchemeNormalOctahedronCanonicalizedTransformBase - : public PredictionSchemeNormalOctahedronTransformBase { - public: - typedef PredictionSchemeNormalOctahedronTransformBase Base; - typedef VectorD Point2; - typedef DataTypeT DataType; - - PredictionSchemeNormalOctahedronCanonicalizedTransformBase() : Base() {} - // We expect the mod value to be of the form 2^b-1. - explicit PredictionSchemeNormalOctahedronCanonicalizedTransformBase( - DataType mod_value) - : Base(mod_value) {} - - static constexpr PredictionSchemeTransformType GetType() { - return PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON_CANONICALIZED; - } - - int32_t GetRotationCount(Point2 pred) const { - const DataType sign_x = pred[0]; - const DataType sign_y = pred[1]; - - int32_t rotation_count = 0; - if (sign_x == 0) { - if (sign_y == 0) { - rotation_count = 0; - } else if (sign_y > 0) { - rotation_count = 3; - } else { - rotation_count = 1; - } - } else if (sign_x > 0) { - if (sign_y >= 0) { - rotation_count = 2; - } else { - rotation_count = 1; - } - } else { - if (sign_y <= 0) { - rotation_count = 0; - } else { - rotation_count = 3; - } - } - return rotation_count; - } - - Point2 RotatePoint(Point2 p, int32_t rotation_count) const { - switch (rotation_count) { - case 1: - return Point2(p[1], -p[0]); - case 2: - return Point2(-p[0], -p[1]); - case 3: - return Point2(-p[1], p[0]); - default: - return p; - } - } - - bool IsInBottomLeft(const Point2 &p) const { - if (p[0] == 0 && p[1] == 0) { - return true; - } - return (p[0] < 0 && p[1] <= 0); - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_CANONICALIZED_TRANSFORM_BASE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_test.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_test.cc deleted file mode 100644 index 8c8932f..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_test.cc +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h" -#include "draco/core/draco_test_base.h" - -namespace { - -class PredictionSchemeNormalOctahedronCanonicalizedTransformTest - : public ::testing::Test { - protected: - typedef draco::PredictionSchemeNormalOctahedronCanonicalizedEncodingTransform< - int32_t> - Transform; - typedef Transform::Point2 Point2; - - void TestComputeCorrection(const Transform &transform, const int32_t &ox, - const int32_t &oy, const int32_t &px, - const int32_t &py, const int32_t &cx, - const int32_t &cy) { - const int32_t o[2] = {ox + 7, oy + 7}; - const int32_t p[2] = {px + 7, py + 7}; - int32_t corr[2] = {500, 500}; - transform.ComputeCorrection(o, p, corr); - ASSERT_EQ(corr[0], (cx + 15) % 15); - ASSERT_EQ(corr[1], (cy + 15) % 15); - } - - void TestGetRotationCount(const Transform &transform, const Point2 &pred, - const int32_t &rot_dir) { - const int32_t rotation_count = transform.GetRotationCount(pred); - ASSERT_EQ(rot_dir, rotation_count); - } - - void TestRotateRepresentation(const Transform &transform, const Point2 &org, - const Point2 &pred, const Point2 &rot_org, - const Point2 &rot_pred) { - const int32_t rotation_count = transform.GetRotationCount(pred); - const Point2 res_org = transform.RotatePoint(org, rotation_count); - const Point2 res_pred = transform.RotatePoint(pred, rotation_count); - ASSERT_EQ(rot_org[0], res_org[0]); - ASSERT_EQ(rot_org[1], res_org[1]); - ASSERT_EQ(rot_pred[0], res_pred[0]); - ASSERT_EQ(rot_pred[1], res_pred[1]); - } -}; - -TEST_F(PredictionSchemeNormalOctahedronCanonicalizedTransformTest, Init) { - const Transform transform(15); - ASSERT_TRUE(transform.AreCorrectionsPositive()); -} - -TEST_F(PredictionSchemeNormalOctahedronCanonicalizedTransformTest, - IsInBottomLeft) { - const Transform transform(15); - ASSERT_TRUE(transform.IsInBottomLeft(Point2(0, 0))); - ASSERT_TRUE(transform.IsInBottomLeft(Point2(-1, -1))); - ASSERT_TRUE(transform.IsInBottomLeft(Point2(-7, -7))); - - ASSERT_FALSE(transform.IsInBottomLeft(Point2(1, 1))); - ASSERT_FALSE(transform.IsInBottomLeft(Point2(7, 7))); - ASSERT_FALSE(transform.IsInBottomLeft(Point2(-1, 1))); - ASSERT_FALSE(transform.IsInBottomLeft(Point2(-7, 7))); - ASSERT_FALSE(transform.IsInBottomLeft(Point2(1, -1))); - ASSERT_FALSE(transform.IsInBottomLeft(Point2(7, -7))); -} - -TEST_F(PredictionSchemeNormalOctahedronCanonicalizedTransformTest, - GetRotationCount) { - const Transform transform(15); - TestGetRotationCount(transform, Point2(1, 2), 2); // top right - TestGetRotationCount(transform, Point2(-1, 2), 3); // top left - TestGetRotationCount(transform, Point2(1, -2), 1); // bottom right - TestGetRotationCount(transform, Point2(-1, -2), 0); // bottom left - TestGetRotationCount(transform, Point2(0, 2), 3); // top left - TestGetRotationCount(transform, Point2(0, -2), 1); // bottom right - TestGetRotationCount(transform, Point2(2, 0), 2); // top right - TestGetRotationCount(transform, Point2(-2, 0), 0); // bottom left - TestGetRotationCount(transform, Point2(0, 0), 0); // bottom left -} - -TEST_F(PredictionSchemeNormalOctahedronCanonicalizedTransformTest, - RotateRepresentation) { - const Transform transform(15); - // p top left; shift clockwise by 3 - TestRotateRepresentation(transform, Point2(1, 2), Point2(-3, 1), - Point2(-2, 1), Point2(-1, -3)); // q top right - TestRotateRepresentation(transform, Point2(-1, -2), Point2(-3, 1), - Point2(2, -1), Point2(-1, -3)); // q bottom left - TestRotateRepresentation(transform, Point2(1, -2), Point2(-3, 1), - Point2(2, 1), Point2(-1, -3)); // q bottom right - TestRotateRepresentation(transform, Point2(-1, 2), Point2(-3, 1), - Point2(-2, -1), Point2(-1, -3)); // q top left - // p top right; shift clockwise by 2 (flip) - TestRotateRepresentation(transform, Point2(1, 1), Point2(1, 3), - Point2(-1, -1), Point2(-1, -3)); // q top right - TestRotateRepresentation(transform, Point2(-1, -2), Point2(1, 3), - Point2(1, 2), Point2(-1, -3)); // q bottom left - TestRotateRepresentation(transform, Point2(-1, 2), Point2(1, 3), - Point2(1, -2), Point2(-1, -3)); // q top left - TestRotateRepresentation(transform, Point2(1, -2), Point2(1, 3), - Point2(-1, 2), Point2(-1, -3)); // q bottom right - // p bottom right; shift clockwise by 1 - TestRotateRepresentation(transform, Point2(1, 2), Point2(3, -1), - Point2(2, -1), Point2(-1, -3)); // q top right - TestRotateRepresentation(transform, Point2(1, -2), Point2(3, -1), - Point2(-2, -1), Point2(-1, -3)); // q bottom right - TestRotateRepresentation(transform, Point2(-1, -2), Point2(3, -1), - Point2(-2, 1), Point2(-1, -3)); // q bottom left - TestRotateRepresentation(transform, Point2(-1, 2), Point2(3, -1), - Point2(2, 1), Point2(-1, -3)); // q top left - // p bottom left; no change - TestRotateRepresentation(transform, Point2(1, 2), Point2(-1, -3), - Point2(1, 2), Point2(-1, -3)); // q top right - TestRotateRepresentation(transform, Point2(-1, 2), Point2(-1, -3), - Point2(-1, 2), Point2(-1, -3)); // q top left - TestRotateRepresentation(transform, Point2(1, -2), Point2(-1, -3), - Point2(1, -2), Point2(-1, -3)); // q bottom right - TestRotateRepresentation(transform, Point2(-1, -2), Point2(-1, -3), - Point2(-1, -2), Point2(-1, -3)); // q bottom left -} - -TEST_F(PredictionSchemeNormalOctahedronCanonicalizedTransformTest, - ComputeCorrection) { - const Transform transform(15); - TestComputeCorrection(transform, 0, 0, 0, 0, 0, 0); - TestComputeCorrection(transform, 1, 1, 1, 1, 0, 0); - // inside diamond; p top right - TestComputeCorrection(transform, 3, 4, 1, 2, -2, -2); // q top right - TestComputeCorrection(transform, -3, 4, 1, 2, 4, -2); // q top left - TestComputeCorrection(transform, 3, -4, 1, 2, -2, 6); // q bottom right - TestComputeCorrection(transform, -3, -4, 1, 2, 4, 6); // q bottom left - // inside diamond; p top left - TestComputeCorrection(transform, 3, 4, -1, 2, -2, 4); // q top right - TestComputeCorrection(transform, -3, 4, -1, 2, -2, -2); // q top left - TestComputeCorrection(transform, 3, -4, -1, 2, 6, 4); // q bottom right - TestComputeCorrection(transform, -3, -4, -1, 2, 6, -2); // q bottom left - // inside diamond; p bottom right - TestComputeCorrection(transform, 3, 4, 1, -2, 6, -2); // q top right - TestComputeCorrection(transform, -3, 4, 1, -2, 6, 4); // q top left - TestComputeCorrection(transform, 3, -4, 1, -2, -2, -2); // q bottom right - TestComputeCorrection(transform, -3, -4, 1, -2, -2, 4); // q bottom left - // inside diamond; p bottom left - TestComputeCorrection(transform, 3, 4, -1, -2, 4, 6); // q top right - TestComputeCorrection(transform, -3, 4, -1, -2, -2, 6); // q top left - TestComputeCorrection(transform, 3, -4, -1, -2, 4, -2); // q bottom right - TestComputeCorrection(transform, -3, -4, -1, -2, -2, -2); // q bottom left - // outside diamond; p top right - TestComputeCorrection(transform, 1, 2, 5, 4, -2, -4); // q top right - TestComputeCorrection(transform, -1, 2, 5, 4, -7, -4); // q top left - TestComputeCorrection(transform, 1, -2, 5, 4, -2, -7); // q bottom right - TestComputeCorrection(transform, -1, -2, 5, 4, -7, -7); // q bottom left - // outside diamond; p top left - TestComputeCorrection(transform, 1, 2, -5, 4, -4, -7); // q top right - TestComputeCorrection(transform, -1, 2, -5, 4, -4, -2); // q top left - TestComputeCorrection(transform, 1, -2, -5, 4, -7, -7); // q bottom right - TestComputeCorrection(transform, -1, -2, -5, 4, -7, -2); // q bottom left - // outside diamond; p bottom right - TestComputeCorrection(transform, 1, 2, 5, -4, -7, -2); // q top right - TestComputeCorrection(transform, -1, 2, 5, -4, -7, -7); // q top left - TestComputeCorrection(transform, 1, -2, 5, -4, -4, -2); // q bottom right - TestComputeCorrection(transform, -1, -2, 5, -4, -4, -7); // q bottom left - // outside diamond; p bottom left - TestComputeCorrection(transform, 1, 2, -5, -4, -7, -7); // q top right - TestComputeCorrection(transform, -1, 2, -5, -4, -2, -7); // q top left - TestComputeCorrection(transform, 1, -2, -5, -4, -7, -4); // q bottom right - TestComputeCorrection(transform, -1, -2, -5, -4, -2, -4); // q bottom left - - TestComputeCorrection(transform, -1, -2, 7, 7, -5, -6); - TestComputeCorrection(transform, 0, 0, 7, 7, 7, 7); - TestComputeCorrection(transform, -1, -2, 0, -2, 0, 1); -} - -TEST_F(PredictionSchemeNormalOctahedronCanonicalizedTransformTest, Interface) { - const Transform transform(15); - ASSERT_EQ(transform.max_quantized_value(), 15); - ASSERT_EQ(transform.center_value(), 7); - ASSERT_EQ(transform.quantization_bits(), 4); -} - -} // namespace diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h deleted file mode 100644 index a1bc4a3..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_DECODING_TRANSFORM_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_DECODING_TRANSFORM_H_ - -#include - -#include "draco/compression/attributes/normal_compression_utils.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h" -#include "draco/core/decoder_buffer.h" -#include "draco/core/macros.h" -#include "draco/core/vector_d.h" -#include "draco/draco_features.h" - -namespace draco { - -// Class for converting correction values transformed by the octahedral normal -// transform back to the original values. See the corresponding encoder for more -// details. -template -class PredictionSchemeNormalOctahedronDecodingTransform - : public PredictionSchemeNormalOctahedronTransformBase { - public: - typedef VectorD Point2; - typedef DataTypeT CorrType; - typedef DataTypeT DataType; - - PredictionSchemeNormalOctahedronDecodingTransform() {} - - // Dummy function to fulfill concept. - void Init(int num_components) {} - bool DecodeTransformData(DecoderBuffer *buffer) { - DataTypeT max_quantized_value, center_value; - if (!buffer->Decode(&max_quantized_value)) { - return false; - } - if (buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 2)) { - if (!buffer->Decode(¢er_value)) { - return false; - } - } - (void)center_value; - return this->set_max_quantized_value(max_quantized_value); - } - - inline void ComputeOriginalValue(const DataType *pred_vals, - const CorrType *corr_vals, - DataType *out_orig_vals) const { - DRACO_DCHECK_LE(pred_vals[0], 2 * this->center_value()); - DRACO_DCHECK_LE(pred_vals[1], 2 * this->center_value()); - DRACO_DCHECK_LE(corr_vals[0], 2 * this->center_value()); - DRACO_DCHECK_LE(corr_vals[1], 2 * this->center_value()); - - DRACO_DCHECK_LE(0, pred_vals[0]); - DRACO_DCHECK_LE(0, pred_vals[1]); - DRACO_DCHECK_LE(0, corr_vals[0]); - DRACO_DCHECK_LE(0, corr_vals[1]); - - const Point2 pred = Point2(pred_vals[0], pred_vals[1]); - const Point2 corr = Point2(corr_vals[0], corr_vals[1]); - const Point2 orig = ComputeOriginalValue(pred, corr); - - out_orig_vals[0] = orig[0]; - out_orig_vals[1] = orig[1]; - } - - private: - Point2 ComputeOriginalValue(Point2 pred, const Point2 &corr) const { - const Point2 t(this->center_value(), this->center_value()); - pred = pred - t; - - const bool pred_is_in_diamond = this->IsInDiamond(pred[0], pred[1]); - if (!pred_is_in_diamond) { - this->InvertDiamond(&pred[0], &pred[1]); - } - Point2 orig = pred + corr; - orig[0] = this->ModMax(orig[0]); - orig[1] = this->ModMax(orig[1]); - if (!pred_is_in_diamond) { - this->InvertDiamond(&orig[0], &orig[1]); - } - orig = orig + t; - return orig; - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_DECODING_TRANSFORM_H_ -#endif diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h deleted file mode 100644 index 4abfef6..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_ENCODING_TRANSFORM_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_ENCODING_TRANSFORM_H_ - -#include - -#include "draco/compression/attributes/normal_compression_utils.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h" -#include "draco/core/encoder_buffer.h" -#include "draco/core/macros.h" -#include "draco/core/vector_d.h" - -namespace draco { - -// The transform works on octahedral coordinates for normals. The square is -// subdivided into four inner triangles (diamond) and four outer triangles. The -// inner triangles are associated with the upper part of the octahedron and the -// outer triangles are associated with the lower part. -// Given a prediction value P and the actual value Q that should be encoded, -// this transform first checks if P is outside the diamond. If so, the outer -// triangles are flipped towards the inside and vice versa. The actual -// correction value is then based on the mapped P and Q values. This tends to -// result in shorter correction vectors. -// This is possible since the P value is also known by the decoder, see also -// ComputeCorrection and ComputeOriginalValue functions. -// Note that the tile is not periodic, which implies that the outer edges can -// not be identified, which requires us to use an odd number of values on each -// axis. -// DataTypeT is expected to be some integral type. -// -template -class PredictionSchemeNormalOctahedronEncodingTransform - : public PredictionSchemeNormalOctahedronTransformBase { - public: - typedef PredictionSchemeNormalOctahedronTransformBase Base; - typedef VectorD Point2; - typedef DataTypeT CorrType; - typedef DataTypeT DataType; - - // We expect the mod value to be of the form 2^b-1. - explicit PredictionSchemeNormalOctahedronEncodingTransform( - DataType max_quantized_value) - : Base(max_quantized_value) {} - - void Init(const DataTypeT *orig_data, int size, int num_components) {} - - bool EncodeTransformData(EncoderBuffer *buffer) { - buffer->Encode(this->max_quantized_value()); - return true; - } - - inline void ComputeCorrection(const DataType *orig_vals, - const DataType *pred_vals, - CorrType *out_corr_vals) const { - DRACO_DCHECK_LE(pred_vals[0], this->center_value() * 2); - DRACO_DCHECK_LE(pred_vals[1], this->center_value() * 2); - DRACO_DCHECK_LE(orig_vals[0], this->center_value() * 2); - DRACO_DCHECK_LE(orig_vals[1], this->center_value() * 2); - DRACO_DCHECK_LE(0, pred_vals[0]); - DRACO_DCHECK_LE(0, pred_vals[1]); - DRACO_DCHECK_LE(0, orig_vals[0]); - DRACO_DCHECK_LE(0, orig_vals[1]); - - const Point2 orig = Point2(orig_vals[0], orig_vals[1]); - const Point2 pred = Point2(pred_vals[0], pred_vals[1]); - const Point2 corr = ComputeCorrection(orig, pred); - - out_corr_vals[0] = corr[0]; - out_corr_vals[1] = corr[1]; - } - - private: - Point2 ComputeCorrection(Point2 orig, Point2 pred) const { - const Point2 t(this->center_value(), this->center_value()); - orig = orig - t; - pred = pred - t; - - if (!this->IsInDiamond(pred[0], pred[1])) { - this->InvertDiamond(&orig[0], &orig[1]); - this->InvertDiamond(&pred[0], &pred[1]); - } - - Point2 corr = orig - pred; - corr[0] = this->MakePositive(corr[0]); - corr[1] = this->MakePositive(corr[1]); - return corr; - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_ENCODING_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h deleted file mode 100644 index c9dd7d6..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_TRANSFORM_BASE_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_TRANSFORM_BASE_H_ - -#include - -#include "draco/compression/attributes/normal_compression_utils.h" -#include "draco/compression/config/compression_shared.h" -#include "draco/core/bit_utils.h" -#include "draco/core/macros.h" -#include "draco/core/vector_d.h" - -namespace draco { - -// Base class containing shared functionality used by both encoding and decoding -// octahedral normal prediction scheme transforms. See the encoding transform -// for more details about the method. -template -class PredictionSchemeNormalOctahedronTransformBase { - public: - typedef VectorD Point2; - typedef DataTypeT DataType; - - PredictionSchemeNormalOctahedronTransformBase() {} - // We expect the mod value to be of the form 2^b-1. - explicit PredictionSchemeNormalOctahedronTransformBase( - DataType max_quantized_value) { - this->set_max_quantized_value(max_quantized_value); - } - - static constexpr PredictionSchemeTransformType GetType() { - return PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON; - } - - // We can return true as we keep correction values positive. - bool AreCorrectionsPositive() const { return true; } - - inline DataTypeT max_quantized_value() const { - return octahedron_tool_box_.max_quantized_value(); - } - inline DataTypeT center_value() const { - return octahedron_tool_box_.center_value(); - } - inline int32_t quantization_bits() const { - return octahedron_tool_box_.quantization_bits(); - } - - protected: - inline bool set_max_quantized_value(DataTypeT max_quantized_value) { - if (max_quantized_value % 2 == 0) { - return false; - } - int q = MostSignificantBit(max_quantized_value) + 1; - return octahedron_tool_box_.SetQuantizationBits(q); - } - - bool IsInDiamond(DataTypeT s, DataTypeT t) const { - return octahedron_tool_box_.IsInDiamond(s, t); - } - void InvertDiamond(DataTypeT *s, DataTypeT *t) const { - return octahedron_tool_box_.InvertDiamond(s, t); - } - - int32_t ModMax(int32_t x) const { return octahedron_tool_box_.ModMax(x); } - - // For correction values. - int32_t MakePositive(int32_t x) const { - return octahedron_tool_box_.MakePositive(x); - } - - private: - OctahedronToolBox octahedron_tool_box_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_NORMAL_OCTAHEDRON_TRANSFORM_BASE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc deleted file mode 100644 index 1001b19..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h" -#include "draco/core/draco_test_base.h" - -namespace { - -class PredictionSchemeNormalOctahedronTransformTest : public ::testing::Test { - protected: - typedef draco::PredictionSchemeNormalOctahedronEncodingTransform - Transform; - typedef Transform::Point2 Point2; - - void TestComputeCorrection(const Transform &transform, const int32_t &ox, - const int32_t &oy, const int32_t &px, - const int32_t &py, const int32_t &cx, - const int32_t &cy) { - const int32_t o[2] = {ox + 7, oy + 7}; - const int32_t p[2] = {px + 7, py + 7}; - int32_t corr[2] = {500, 500}; - transform.ComputeCorrection(o, p, corr); - ASSERT_EQ(corr[0], (cx + 15) % 15); - ASSERT_EQ(corr[1], (cy + 15) % 15); - } -}; - -TEST_F(PredictionSchemeNormalOctahedronTransformTest, Init) { - const Transform transform(15); - ASSERT_TRUE(transform.AreCorrectionsPositive()); -} - -TEST_F(PredictionSchemeNormalOctahedronTransformTest, ComputeCorrections) { - const Transform transform(15); - // checks inside diamond - TestComputeCorrection(transform, 0, 0, 0, 0, 0, 0); - TestComputeCorrection(transform, 1, 1, 1, 1, 0, 0); - TestComputeCorrection(transform, 3, 4, 1, 1, 2, 3); - TestComputeCorrection(transform, -1, -1, -1, -1, 0, 0); - TestComputeCorrection(transform, -3, -4, -1, -1, -2, -3); - // checks outside diamond - TestComputeCorrection(transform, 4, 4, 4, 4, 0, 0); - TestComputeCorrection(transform, 5, 6, 4, 4, -2, -1); - TestComputeCorrection(transform, 3, 2, 4, 4, 2, 1); - // checks on outer edges - TestComputeCorrection(transform, 7, 7, 4, 4, -3, -3); - TestComputeCorrection(transform, 6, 7, 4, 4, -3, -2); - TestComputeCorrection(transform, -6, 7, 4, 4, -3, -2); - TestComputeCorrection(transform, 7, 6, 4, 4, -2, -3); - TestComputeCorrection(transform, 7, -6, 4, 4, -2, -3); -} - -TEST_F(PredictionSchemeNormalOctahedronTransformTest, Interface) { - const Transform transform(15); - ASSERT_EQ(transform.max_quantized_value(), 15); - ASSERT_EQ(transform.center_value(), 7); - ASSERT_EQ(transform.quantization_bits(), 4); -} - -} // namespace diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h deleted file mode 100644 index e100c73..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_DECODING_TRANSFORM_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_DECODING_TRANSFORM_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h" -#include "draco/core/decoder_buffer.h" - -namespace draco { - -// PredictionSchemeWrapDecodingTransform unwraps values encoded with the -// PredictionSchemeWrapEncodingTransform. -// See prediction_scheme_wrap_transform_base.h for more details about the -// method. -template -class PredictionSchemeWrapDecodingTransform - : public PredictionSchemeWrapTransformBase { - public: - typedef CorrTypeT CorrType; - PredictionSchemeWrapDecodingTransform() {} - - // Computes the original value from the input predicted value and the decoded - // corrections. Values out of the bounds of the input values are unwrapped. - inline void ComputeOriginalValue(const DataTypeT *predicted_vals, - const CorrTypeT *corr_vals, - DataTypeT *out_original_vals) const { - // For now we assume both |DataTypeT| and |CorrTypeT| are equal. - static_assert(std::is_same::value, - "Predictions and corrections must have the same type."); - - // The only valid implementation right now is for int32_t. - static_assert(std::is_same::value, - "Only int32_t is supported for predicted values."); - - predicted_vals = this->ClampPredictedValue(predicted_vals); - - // Perform the wrapping using unsigned coordinates to avoid potential signed - // integer overflows caused by malformed input. - const uint32_t *const uint_predicted_vals = - reinterpret_cast(predicted_vals); - const uint32_t *const uint_corr_vals = - reinterpret_cast(corr_vals); - for (int i = 0; i < this->num_components(); ++i) { - out_original_vals[i] = - static_cast(uint_predicted_vals[i] + uint_corr_vals[i]); - if (out_original_vals[i] > this->max_value()) { - out_original_vals[i] -= this->max_dif(); - } else if (out_original_vals[i] < this->min_value()) { - out_original_vals[i] += this->max_dif(); - } - } - } - - bool DecodeTransformData(DecoderBuffer *buffer) { - DataTypeT min_value, max_value; - if (!buffer->Decode(&min_value)) { - return false; - } - if (!buffer->Decode(&max_value)) { - return false; - } - if (min_value > max_value) { - return false; - } - this->set_min_value(min_value); - this->set_max_value(max_value); - if (!this->InitCorrectionBounds()) { - return false; - } - return true; - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_DECODING_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h deleted file mode 100644 index 1f5e8b1..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_ENCODING_TRANSFORM_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_ENCODING_TRANSFORM_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h" -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// PredictionSchemeWrapEncodingTransform wraps input values using the wrapping -// scheme described in: prediction_scheme_wrap_transform_base.h . -template -class PredictionSchemeWrapEncodingTransform - : public PredictionSchemeWrapTransformBase { - public: - typedef CorrTypeT CorrType; - PredictionSchemeWrapEncodingTransform() {} - - void Init(const DataTypeT *orig_data, int size, int num_components) { - PredictionSchemeWrapTransformBase::Init(num_components); - // Go over the original values and compute the bounds. - if (size == 0) { - return; - } - DataTypeT min_value = orig_data[0]; - DataTypeT max_value = min_value; - for (int i = 1; i < size; ++i) { - if (orig_data[i] < min_value) { - min_value = orig_data[i]; - } else if (orig_data[i] > max_value) { - max_value = orig_data[i]; - } - } - this->set_min_value(min_value); - this->set_max_value(max_value); - this->InitCorrectionBounds(); - } - - // Computes the corrections based on the input original value and the - // predicted value. Out of bound correction values are wrapped around the max - // range of input values. - inline void ComputeCorrection(const DataTypeT *original_vals, - const DataTypeT *predicted_vals, - CorrTypeT *out_corr_vals) const { - for (int i = 0; i < this->num_components(); ++i) { - predicted_vals = this->ClampPredictedValue(predicted_vals); - out_corr_vals[i] = original_vals[i] - predicted_vals[i]; - // Wrap around if needed. - DataTypeT &corr_val = out_corr_vals[i]; - if (corr_val < this->min_correction()) { - corr_val += this->max_dif(); - } else if (corr_val > this->max_correction()) { - corr_val -= this->max_dif(); - } - } - } - - bool EncodeTransformData(EncoderBuffer *buffer) { - // Store the input value range as it is needed by the decoder. - buffer->Encode(this->min_value()); - buffer->Encode(this->max_value()); - return true; - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_ENCODING_TRANSFORM_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h deleted file mode 100644 index 26f61fb..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_TRANSFORM_BASE_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_TRANSFORM_BASE_H_ - -#include -#include - -#include "draco/compression/config/compression_shared.h" -#include "draco/core/macros.h" - -namespace draco { - -// PredictionSchemeWrapTransform uses the min and max bounds of the original -// data to wrap stored correction values around these bounds centered at 0, -// i.e., when the range of the original values O is between and -// N = MAX-MIN, we can then store any correction X = O - P, as: -// X + N, if X < -N / 2 -// X - N, if X > N / 2 -// X otherwise -// To unwrap this value, the decoder then simply checks whether the final -// corrected value F = P + X is out of the bounds of the input values. -// All out of bounds values are unwrapped using -// F + N, if F < MIN -// F - N, if F > MAX -// This wrapping can reduce the number of unique values, which translates to a -// better entropy of the stored values and better compression rates. -template -class PredictionSchemeWrapTransformBase { - public: - PredictionSchemeWrapTransformBase() - : num_components_(0), - min_value_(0), - max_value_(0), - max_dif_(0), - max_correction_(0), - min_correction_(0) {} - - static constexpr PredictionSchemeTransformType GetType() { - return PREDICTION_TRANSFORM_WRAP; - } - - void Init(int num_components) { - num_components_ = num_components; - clamped_value_.resize(num_components); - } - - bool AreCorrectionsPositive() const { return false; } - - inline const DataTypeT *ClampPredictedValue( - const DataTypeT *predicted_val) const { - for (int i = 0; i < this->num_components(); ++i) { - if (predicted_val[i] > max_value_) { - clamped_value_[i] = max_value_; - } else if (predicted_val[i] < min_value_) { - clamped_value_[i] = min_value_; - } else { - clamped_value_[i] = predicted_val[i]; - } - } - return &clamped_value_[0]; - } - - // TODO(hemmer): Consider refactoring to avoid this dummy. - int quantization_bits() const { - DRACO_DCHECK(false); - return -1; - } - - protected: - bool InitCorrectionBounds() { - const int64_t dif = - static_cast(max_value_) - static_cast(min_value_); - if (dif < 0 || dif >= std::numeric_limits::max()) { - return false; - } - max_dif_ = 1 + static_cast(dif); - max_correction_ = max_dif_ / 2; - min_correction_ = -max_correction_; - if ((max_dif_ & 1) == 0) { - max_correction_ -= 1; - } - return true; - } - - inline int num_components() const { return num_components_; } - inline DataTypeT min_value() const { return min_value_; } - inline void set_min_value(const DataTypeT &v) { min_value_ = v; } - inline DataTypeT max_value() const { return max_value_; } - inline void set_max_value(const DataTypeT &v) { max_value_ = v; } - inline DataTypeT max_dif() const { return max_dif_; } - inline DataTypeT min_correction() const { return min_correction_; } - inline DataTypeT max_correction() const { return max_correction_; } - - private: - int num_components_; - DataTypeT min_value_; - DataTypeT max_value_; - DataTypeT max_dif_; - DataTypeT max_correction_; - DataTypeT min_correction_; - // This is in fact just a tmp variable to avoid reallocation. - mutable std::vector clamped_value_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_TRANSFORM_BASE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoder.cc deleted file mode 100644 index b4ba24f..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoder.cc +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_attribute_decoder.h" - -namespace draco { - -SequentialAttributeDecoder::SequentialAttributeDecoder() - : decoder_(nullptr), attribute_(nullptr), attribute_id_(-1) {} - -bool SequentialAttributeDecoder::Init(PointCloudDecoder *decoder, - int attribute_id) { - decoder_ = decoder; - attribute_ = decoder->point_cloud()->attribute(attribute_id); - attribute_id_ = attribute_id; - return true; -} - -bool SequentialAttributeDecoder::InitializeStandalone( - PointAttribute *attribute) { - attribute_ = attribute; - attribute_id_ = -1; - return true; -} - -bool SequentialAttributeDecoder::DecodePortableAttribute( - const std::vector &point_ids, DecoderBuffer *in_buffer) { - if (attribute_->num_components() <= 0 || - !attribute_->Reset(point_ids.size())) { - return false; - } - if (!DecodeValues(point_ids, in_buffer)) { - return false; - } - return true; -} - -bool SequentialAttributeDecoder::DecodeDataNeededByPortableTransform( - const std::vector &point_ids, DecoderBuffer *in_buffer) { - // Default implementation does not apply any transform. - return true; -} - -bool SequentialAttributeDecoder::TransformAttributeToOriginalFormat( - const std::vector &point_ids) { - // Default implementation does not apply any transform. - return true; -} - -const PointAttribute *SequentialAttributeDecoder::GetPortableAttribute() { - // If needed, copy point to attribute value index mapping from the final - // attribute to the portable attribute. - if (!attribute_->is_mapping_identity() && portable_attribute_ && - portable_attribute_->is_mapping_identity()) { - portable_attribute_->SetExplicitMapping(attribute_->indices_map_size()); - for (PointIndex i(0); - i < static_cast(attribute_->indices_map_size()); ++i) { - portable_attribute_->SetPointMapEntry(i, attribute_->mapped_index(i)); - } - } - return portable_attribute_.get(); -} - -bool SequentialAttributeDecoder::InitPredictionScheme( - PredictionSchemeInterface *ps) { - for (int i = 0; i < ps->GetNumParentAttributes(); ++i) { - const int att_id = decoder_->point_cloud()->GetNamedAttributeId( - ps->GetParentAttributeType(i)); - if (att_id == -1) { - return false; // Requested attribute does not exist. - } -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (decoder_->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 0)) { - if (!ps->SetParentAttribute(decoder_->point_cloud()->attribute(att_id))) { - return false; - } - } else -#endif - { - const PointAttribute *const pa = decoder_->GetPortableAttribute(att_id); - if (pa == nullptr || !ps->SetParentAttribute(pa)) { - return false; - } - } - } - return true; -} - -bool SequentialAttributeDecoder::DecodeValues( - const std::vector &point_ids, DecoderBuffer *in_buffer) { - const int32_t num_values = static_cast(point_ids.size()); - const int entry_size = static_cast(attribute_->byte_stride()); - std::unique_ptr value_data_ptr(new uint8_t[entry_size]); - uint8_t *const value_data = value_data_ptr.get(); - int out_byte_pos = 0; - // Decode raw attribute values in their original format. - for (int i = 0; i < num_values; ++i) { - if (!in_buffer->Decode(value_data, entry_size)) { - return false; - } - attribute_->buffer()->Write(out_byte_pos, value_data, entry_size); - out_byte_pos += entry_size; - } - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoder.h deleted file mode 100644 index d481194..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoder.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_DECODER_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h" -#include "draco/compression/point_cloud/point_cloud_decoder.h" -#include "draco/draco_features.h" - -namespace draco { - -// A base class for decoding attribute values encoded by the -// SequentialAttributeEncoder. -class SequentialAttributeDecoder { - public: - SequentialAttributeDecoder(); - virtual ~SequentialAttributeDecoder() = default; - - virtual bool Init(PointCloudDecoder *decoder, int attribute_id); - - // Initialization for a specific attribute. This can be used mostly for - // standalone decoding of an attribute without an PointCloudDecoder. - virtual bool InitializeStandalone(PointAttribute *attribute); - - // Performs lossless decoding of the portable attribute data. - virtual bool DecodePortableAttribute(const std::vector &point_ids, - DecoderBuffer *in_buffer); - - // Decodes any data needed to revert portable transform of the decoded - // attribute. - virtual bool DecodeDataNeededByPortableTransform( - const std::vector &point_ids, DecoderBuffer *in_buffer); - - // Reverts transformation performed by encoder in - // SequentialAttributeEncoder::TransformAttributeToPortableFormat() method. - virtual bool TransformAttributeToOriginalFormat( - const std::vector &point_ids); - - const PointAttribute *GetPortableAttribute(); - - const PointAttribute *attribute() const { return attribute_; } - PointAttribute *attribute() { return attribute_; } - int attribute_id() const { return attribute_id_; } - PointCloudDecoder *decoder() const { return decoder_; } - - protected: - // Should be used to initialize newly created prediction scheme. - // Returns false when the initialization failed (in which case the scheme - // cannot be used). - virtual bool InitPredictionScheme(PredictionSchemeInterface *ps); - - // The actual implementation of the attribute decoding. Should be overridden - // for specialized decoders. - virtual bool DecodeValues(const std::vector &point_ids, - DecoderBuffer *in_buffer); - - void SetPortableAttribute(std::unique_ptr att) { - portable_attribute_ = std::move(att); - } - - PointAttribute *portable_attribute() { return portable_attribute_.get(); } - - private: - PointCloudDecoder *decoder_; - PointAttribute *attribute_; - int attribute_id_; - - // Storage for decoded portable attribute (after lossless decoding). - std::unique_ptr portable_attribute_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoders_controller.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoders_controller.cc deleted file mode 100644 index 0e5e26b..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoders_controller.cc +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_attribute_decoders_controller.h" -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED -#include "draco/compression/attributes/sequential_normal_attribute_decoder.h" -#endif -#include "draco/compression/attributes/sequential_quantization_attribute_decoder.h" -#include "draco/compression/config/compression_shared.h" - -namespace draco { - -SequentialAttributeDecodersController::SequentialAttributeDecodersController( - std::unique_ptr sequencer) - : sequencer_(std::move(sequencer)) {} - -bool SequentialAttributeDecodersController::DecodeAttributesDecoderData( - DecoderBuffer *buffer) { - if (!AttributesDecoder::DecodeAttributesDecoderData(buffer)) { - return false; - } - // Decode unique ids of all sequential encoders and create them. - const int32_t num_attributes = GetNumAttributes(); - sequential_decoders_.resize(num_attributes); - for (int i = 0; i < num_attributes; ++i) { - uint8_t decoder_type; - if (!buffer->Decode(&decoder_type)) { - return false; - } - // Create the decoder from the id. - sequential_decoders_[i] = CreateSequentialDecoder(decoder_type); - if (!sequential_decoders_[i]) { - return false; - } - if (!sequential_decoders_[i]->Init(GetDecoder(), GetAttributeId(i))) { - return false; - } - } - return true; -} - -bool SequentialAttributeDecodersController::DecodeAttributes( - DecoderBuffer *buffer) { - if (!sequencer_ || !sequencer_->GenerateSequence(&point_ids_)) { - return false; - } - // Initialize point to attribute value mapping for all decoded attributes. - const int32_t num_attributes = GetNumAttributes(); - for (int i = 0; i < num_attributes; ++i) { - PointAttribute *const pa = - GetDecoder()->point_cloud()->attribute(GetAttributeId(i)); - if (!sequencer_->UpdatePointToAttributeIndexMapping(pa)) { - return false; - } - } - return AttributesDecoder::DecodeAttributes(buffer); -} - -bool SequentialAttributeDecodersController::DecodePortableAttributes( - DecoderBuffer *in_buffer) { - const int32_t num_attributes = GetNumAttributes(); - for (int i = 0; i < num_attributes; ++i) { - if (!sequential_decoders_[i]->DecodePortableAttribute(point_ids_, - in_buffer)) { - return false; - } - } - return true; -} - -bool SequentialAttributeDecodersController:: - DecodeDataNeededByPortableTransforms(DecoderBuffer *in_buffer) { - const int32_t num_attributes = GetNumAttributes(); - for (int i = 0; i < num_attributes; ++i) { - if (!sequential_decoders_[i]->DecodeDataNeededByPortableTransform( - point_ids_, in_buffer)) { - return false; - } - } - return true; -} - -bool SequentialAttributeDecodersController:: - TransformAttributesToOriginalFormat() { - const int32_t num_attributes = GetNumAttributes(); - for (int i = 0; i < num_attributes; ++i) { - // Check whether the attribute transform should be skipped. - if (GetDecoder()->options()) { - const PointAttribute *const attribute = - sequential_decoders_[i]->attribute(); - const PointAttribute *const portable_attribute = - sequential_decoders_[i]->GetPortableAttribute(); - if (portable_attribute && - GetDecoder()->options()->GetAttributeBool( - attribute->attribute_type(), "skip_attribute_transform", false)) { - // Attribute transform should not be performed. In this case, we replace - // the output geometry attribute with the portable attribute. - // TODO(ostava): We can potentially avoid this copy by introducing a new - // mechanism that would allow to use the final attributes as portable - // attributes for predictors that may need them. - sequential_decoders_[i]->attribute()->CopyFrom(*portable_attribute); - continue; - } - } - if (!sequential_decoders_[i]->TransformAttributeToOriginalFormat( - point_ids_)) { - return false; - } - } - return true; -} - -std::unique_ptr -SequentialAttributeDecodersController::CreateSequentialDecoder( - uint8_t decoder_type) { - switch (decoder_type) { - case SEQUENTIAL_ATTRIBUTE_ENCODER_GENERIC: - return std::unique_ptr( - new SequentialAttributeDecoder()); - case SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER: - return std::unique_ptr( - new SequentialIntegerAttributeDecoder()); - case SEQUENTIAL_ATTRIBUTE_ENCODER_QUANTIZATION: - return std::unique_ptr( - new SequentialQuantizationAttributeDecoder()); -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED - case SEQUENTIAL_ATTRIBUTE_ENCODER_NORMALS: - return std::unique_ptr( - new SequentialNormalAttributeDecoder()); -#endif - default: - break; - } - // Unknown or unsupported decoder type. - return nullptr; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoders_controller.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoders_controller.h deleted file mode 100644 index abc1f36..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_decoders_controller.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_H_ - -#include "draco/compression/attributes/attributes_decoder.h" -#include "draco/compression/attributes/points_sequencer.h" -#include "draco/compression/attributes/sequential_attribute_decoder.h" - -namespace draco { - -// A basic implementation of an attribute decoder that decodes data encoded by -// the SequentialAttributeEncodersController class. The -// SequentialAttributeDecodersController creates a single -// AttributeIndexedValuesDecoder for each of the decoded attribute, where the -// type of the values decoder is determined by the unique identifier that was -// encoded by the encoder. -class SequentialAttributeDecodersController : public AttributesDecoder { - public: - explicit SequentialAttributeDecodersController( - std::unique_ptr sequencer); - - bool DecodeAttributesDecoderData(DecoderBuffer *buffer) override; - bool DecodeAttributes(DecoderBuffer *buffer) override; - const PointAttribute *GetPortableAttribute( - int32_t point_attribute_id) override { - const int32_t loc_id = GetLocalIdForPointAttribute(point_attribute_id); - if (loc_id < 0) { - return nullptr; - } - return sequential_decoders_[loc_id]->GetPortableAttribute(); - } - - protected: - bool DecodePortableAttributes(DecoderBuffer *in_buffer) override; - bool DecodeDataNeededByPortableTransforms(DecoderBuffer *in_buffer) override; - bool TransformAttributesToOriginalFormat() override; - virtual std::unique_ptr CreateSequentialDecoder( - uint8_t decoder_type); - - private: - std::vector> sequential_decoders_; - std::vector point_ids_; - std::unique_ptr sequencer_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoder.cc deleted file mode 100644 index 6bde3ee..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoder.cc +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_attribute_encoder.h" - -namespace draco { - -SequentialAttributeEncoder::SequentialAttributeEncoder() - : encoder_(nullptr), - attribute_(nullptr), - attribute_id_(-1), - is_parent_encoder_(false) {} - -bool SequentialAttributeEncoder::Init(PointCloudEncoder *encoder, - int attribute_id) { - encoder_ = encoder; - attribute_ = encoder_->point_cloud()->attribute(attribute_id); - attribute_id_ = attribute_id; - return true; -} - -bool SequentialAttributeEncoder::InitializeStandalone( - PointAttribute *attribute) { - attribute_ = attribute; - attribute_id_ = -1; - return true; -} - -bool SequentialAttributeEncoder::TransformAttributeToPortableFormat( - const std::vector &point_ids) { - // Default implementation doesn't transform the input data. - return true; -} - -bool SequentialAttributeEncoder::EncodePortableAttribute( - const std::vector &point_ids, EncoderBuffer *out_buffer) { - // Lossless encoding of the input values. - if (!EncodeValues(point_ids, out_buffer)) { - return false; - } - return true; -} - -bool SequentialAttributeEncoder::EncodeDataNeededByPortableTransform( - EncoderBuffer *out_buffer) { - // Default implementation doesn't transform the input data. - return true; -} - -bool SequentialAttributeEncoder::EncodeValues( - const std::vector &point_ids, EncoderBuffer *out_buffer) { - const int entry_size = static_cast(attribute_->byte_stride()); - const std::unique_ptr value_data_ptr(new uint8_t[entry_size]); - uint8_t *const value_data = value_data_ptr.get(); - // Encode all attribute values in their native raw format. - for (uint32_t i = 0; i < point_ids.size(); ++i) { - const AttributeValueIndex entry_id = attribute_->mapped_index(point_ids[i]); - attribute_->GetValue(entry_id, value_data); - out_buffer->Encode(value_data, entry_size); - } - return true; -} - -void SequentialAttributeEncoder::MarkParentAttribute() { - is_parent_encoder_ = true; -} - -bool SequentialAttributeEncoder::InitPredictionScheme( - PredictionSchemeInterface *ps) { - for (int i = 0; i < ps->GetNumParentAttributes(); ++i) { - const int att_id = encoder_->point_cloud()->GetNamedAttributeId( - ps->GetParentAttributeType(i)); - if (att_id == -1) { - return false; // Requested attribute does not exist. - } - parent_attributes_.push_back(att_id); - encoder_->MarkParentAttribute(att_id); - } - return true; -} - -bool SequentialAttributeEncoder::SetPredictionSchemeParentAttributes( - PredictionSchemeInterface *ps) { - for (int i = 0; i < ps->GetNumParentAttributes(); ++i) { - const int att_id = encoder_->point_cloud()->GetNamedAttributeId( - ps->GetParentAttributeType(i)); - if (att_id == -1) { - return false; // Requested attribute does not exist. - } - if (!ps->SetParentAttribute(encoder_->GetPortableAttribute(att_id))) { - return false; - } - } - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoder.h deleted file mode 100644 index 00f62db..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoder.h +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_ENCODER_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h" -#include "draco/compression/point_cloud/point_cloud_encoder.h" - -namespace draco { - -// A base class for encoding attribute values of a single attribute using a -// given sequence of point ids. The default implementation encodes all attribute -// values directly to the buffer but derived classes can perform any custom -// encoding (such as quantization) by overriding the EncodeValues() method. -class SequentialAttributeEncoder { - public: - SequentialAttributeEncoder(); - virtual ~SequentialAttributeEncoder() = default; - - // Method that can be used for custom initialization of an attribute encoder, - // such as creation of prediction schemes and initialization of attribute - // encoder dependencies. - // |encoder| is the parent PointCloudEncoder, - // |attribute_id| is the id of the attribute that is being encoded by this - // encoder. - // This method is automatically called by the PointCloudEncoder after all - // attribute encoders are created and it should not be called explicitly from - // other places. - virtual bool Init(PointCloudEncoder *encoder, int attribute_id); - - // Initialization for a specific attribute. This can be used mostly for - // standalone encoding of an attribute without an PointCloudEncoder. - virtual bool InitializeStandalone(PointAttribute *attribute); - - // Transforms attribute data into format that is going to be encoded - // losslessly. The transform itself can be lossy. - virtual bool TransformAttributeToPortableFormat( - const std::vector &point_ids); - - // Performs lossless encoding of the transformed attribute data. - virtual bool EncodePortableAttribute(const std::vector &point_ids, - EncoderBuffer *out_buffer); - - // Encodes any data related to the portable attribute transform. - virtual bool EncodeDataNeededByPortableTransform(EncoderBuffer *out_buffer); - - virtual bool IsLossyEncoder() const { return false; } - - int NumParentAttributes() const { - return static_cast(parent_attributes_.size()); - } - int GetParentAttributeId(int i) const { return parent_attributes_[i]; } - - const PointAttribute *GetPortableAttribute() const { - if (portable_attribute_ != nullptr) { - return portable_attribute_.get(); - } - return attribute(); - } - - // Called when this attribute encoder becomes a parent encoder of another - // encoder. - void MarkParentAttribute(); - - virtual uint8_t GetUniqueId() const { - return SEQUENTIAL_ATTRIBUTE_ENCODER_GENERIC; - } - - const PointAttribute *attribute() const { return attribute_; } - int attribute_id() const { return attribute_id_; } - PointCloudEncoder *encoder() const { return encoder_; } - - protected: - // Should be used to initialize newly created prediction scheme. - // Returns false when the initialization failed (in which case the scheme - // cannot be used). - virtual bool InitPredictionScheme(PredictionSchemeInterface *ps); - - // Sets parent attributes for a given prediction scheme. Must be called - // after all prediction schemes are initialized, but before the prediction - // scheme is used. - virtual bool SetPredictionSchemeParentAttributes( - PredictionSchemeInterface *ps); - - // Encodes all attribute values in the specified order. Should be overridden - // for specialized encoders. - virtual bool EncodeValues(const std::vector &point_ids, - EncoderBuffer *out_buffer); - - bool is_parent_encoder() const { return is_parent_encoder_; } - - void SetPortableAttribute(std::unique_ptr att) { - portable_attribute_ = std::move(att); - } - - // Returns a mutable attribute that should be filled by derived encoders with - // the transformed version of the attribute data. To get a public const - // version, use the GetPortableAttribute() method. - PointAttribute *portable_attribute() { return portable_attribute_.get(); } - - private: - PointCloudEncoder *encoder_; - const PointAttribute *attribute_; - int attribute_id_; - - // List of attribute encoders that need to be encoded before this attribute. - // E.g. The parent attributes may be used to predict values used by this - // attribute encoder. - std::vector parent_attributes_; - - bool is_parent_encoder_; - - // Attribute that stores transformed data from the source attribute after it - // is processed through the ApplyTransform() method. Attribute data stored - // within this attribute is guaranteed to be encoded losslessly and it can be - // safely used for prediction of other attributes. - std::unique_ptr portable_attribute_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.cc deleted file mode 100644 index 7d5d1ee..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.cc +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_attribute_encoders_controller.h" -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED -#include "draco/compression/attributes/sequential_normal_attribute_encoder.h" -#endif -#include "draco/compression/attributes/sequential_quantization_attribute_encoder.h" -#include "draco/compression/point_cloud/point_cloud_encoder.h" - -namespace draco { - -SequentialAttributeEncodersController::SequentialAttributeEncodersController( - std::unique_ptr sequencer) - : sequencer_(std::move(sequencer)) {} - -SequentialAttributeEncodersController::SequentialAttributeEncodersController( - std::unique_ptr sequencer, int point_attrib_id) - : AttributesEncoder(point_attrib_id), sequencer_(std::move(sequencer)) {} - -bool SequentialAttributeEncodersController::Init(PointCloudEncoder *encoder, - const PointCloud *pc) { - if (!AttributesEncoder::Init(encoder, pc)) { - return false; - } - if (!CreateSequentialEncoders()) { - return false; - } - // Initialize all value encoders. - for (uint32_t i = 0; i < num_attributes(); ++i) { - const int32_t att_id = GetAttributeId(i); - if (!sequential_encoders_[i]->Init(encoder, att_id)) { - return false; - } - } - return true; -} - -bool SequentialAttributeEncodersController::EncodeAttributesEncoderData( - EncoderBuffer *out_buffer) { - if (!AttributesEncoder::EncodeAttributesEncoderData(out_buffer)) { - return false; - } - // Encode a unique id of every sequential encoder. - for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { - out_buffer->Encode(sequential_encoders_[i]->GetUniqueId()); - } - return true; -} - -bool SequentialAttributeEncodersController::EncodeAttributes( - EncoderBuffer *buffer) { - if (!sequencer_ || !sequencer_->GenerateSequence(&point_ids_)) { - return false; - } - return AttributesEncoder::EncodeAttributes(buffer); -} - -bool SequentialAttributeEncodersController:: - TransformAttributesToPortableFormat() { - for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { - if (!sequential_encoders_[i]->TransformAttributeToPortableFormat( - point_ids_)) { - return false; - } - } - return true; -} - -bool SequentialAttributeEncodersController::EncodePortableAttributes( - EncoderBuffer *out_buffer) { - for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { - if (!sequential_encoders_[i]->EncodePortableAttribute(point_ids_, - out_buffer)) { - return false; - } - } - return true; -} - -bool SequentialAttributeEncodersController:: - EncodeDataNeededByPortableTransforms(EncoderBuffer *out_buffer) { - for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { - if (!sequential_encoders_[i]->EncodeDataNeededByPortableTransform( - out_buffer)) { - return false; - } - } - return true; -} - -bool SequentialAttributeEncodersController::CreateSequentialEncoders() { - sequential_encoders_.resize(num_attributes()); - for (uint32_t i = 0; i < num_attributes(); ++i) { - sequential_encoders_[i] = CreateSequentialEncoder(i); - if (sequential_encoders_[i] == nullptr) { - return false; - } - if (i < sequential_encoder_marked_as_parent_.size()) { - if (sequential_encoder_marked_as_parent_[i]) { - sequential_encoders_[i]->MarkParentAttribute(); - } - } - } - return true; -} - -std::unique_ptr -SequentialAttributeEncodersController::CreateSequentialEncoder(int i) { - const int32_t att_id = GetAttributeId(i); - const PointAttribute *const att = encoder()->point_cloud()->attribute(att_id); - - switch (att->data_type()) { - case DT_UINT8: - case DT_INT8: - case DT_UINT16: - case DT_INT16: - case DT_UINT32: - case DT_INT32: - return std::unique_ptr( - new SequentialIntegerAttributeEncoder()); - case DT_FLOAT32: - if (encoder()->options()->GetAttributeInt(att_id, "quantization_bits", - -1) > 0) { -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED - if (att->attribute_type() == GeometryAttribute::NORMAL) { - // We currently only support normals with float coordinates - // and must be quantized. - return std::unique_ptr( - new SequentialNormalAttributeEncoder()); - } else { -#endif - return std::unique_ptr( - new SequentialQuantizationAttributeEncoder()); -#ifdef DRACO_NORMAL_ENCODING_SUPPORTED - } -#endif - } - break; - default: - break; - } - // Return the default attribute encoder. - return std::unique_ptr( - new SequentialAttributeEncoder()); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.h deleted file mode 100644 index 13c2704..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.h +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_H_ - -#include "draco/compression/attributes/attributes_encoder.h" -#include "draco/compression/attributes/points_sequencer.h" -#include "draco/compression/attributes/sequential_attribute_encoder.h" - -namespace draco { - -// A basic implementation of an attribute encoder that can be used to encode -// an arbitrary set of attributes. The encoder creates a sequential attribute -// encoder for each encoded attribute (see sequential_attribute_encoder.h) and -// then it encodes all attribute values in an order defined by a point sequence -// generated in the GeneratePointSequence() method. The default implementation -// generates a linear sequence of all points, but derived classes can generate -// any custom sequence. -class SequentialAttributeEncodersController : public AttributesEncoder { - public: - explicit SequentialAttributeEncodersController( - std::unique_ptr sequencer); - SequentialAttributeEncodersController( - std::unique_ptr sequencer, int point_attrib_id); - - bool Init(PointCloudEncoder *encoder, const PointCloud *pc) override; - bool EncodeAttributesEncoderData(EncoderBuffer *out_buffer) override; - bool EncodeAttributes(EncoderBuffer *buffer) override; - uint8_t GetUniqueId() const override { return BASIC_ATTRIBUTE_ENCODER; } - - int NumParentAttributes(int32_t point_attribute_id) const override { - const int32_t loc_id = GetLocalIdForPointAttribute(point_attribute_id); - if (loc_id < 0) { - return 0; - } - return sequential_encoders_[loc_id]->NumParentAttributes(); - } - - int GetParentAttributeId(int32_t point_attribute_id, - int32_t parent_i) const override { - const int32_t loc_id = GetLocalIdForPointAttribute(point_attribute_id); - if (loc_id < 0) { - return -1; - } - return sequential_encoders_[loc_id]->GetParentAttributeId(parent_i); - } - - bool MarkParentAttribute(int32_t point_attribute_id) override { - const int32_t loc_id = GetLocalIdForPointAttribute(point_attribute_id); - if (loc_id < 0) { - return false; - } - // Mark the attribute encoder as parent (even when if it is not created - // yet). - if (sequential_encoder_marked_as_parent_.size() <= loc_id) { - sequential_encoder_marked_as_parent_.resize(loc_id + 1, false); - } - sequential_encoder_marked_as_parent_[loc_id] = true; - - if (sequential_encoders_.size() <= loc_id) { - return true; // Sequential encoders not generated yet. - } - sequential_encoders_[loc_id]->MarkParentAttribute(); - return true; - } - - const PointAttribute *GetPortableAttribute( - int32_t point_attribute_id) override { - const int32_t loc_id = GetLocalIdForPointAttribute(point_attribute_id); - if (loc_id < 0) { - return nullptr; - } - return sequential_encoders_[loc_id]->GetPortableAttribute(); - } - - protected: - bool TransformAttributesToPortableFormat() override; - bool EncodePortableAttributes(EncoderBuffer *out_buffer) override; - bool EncodeDataNeededByPortableTransforms(EncoderBuffer *out_buffer) override; - - // Creates all sequential encoders (one for each attribute associated with the - // encoder). - virtual bool CreateSequentialEncoders(); - - // Create a sequential encoder for a given attribute based on the attribute - // type - // and the provided encoder options. - virtual std::unique_ptr CreateSequentialEncoder( - int i); - - private: - std::vector> sequential_encoders_; - - // Flag for each sequential attribute encoder indicating whether it was marked - // as parent attribute or not. - std::vector sequential_encoder_marked_as_parent_; - std::vector point_ids_; - std::unique_ptr sequencer_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc deleted file mode 100644 index 83f4212..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_integer_attribute_decoder.h" - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h" -#include "draco/compression/entropy/symbol_decoding.h" - -namespace draco { - -SequentialIntegerAttributeDecoder::SequentialIntegerAttributeDecoder() {} - -bool SequentialIntegerAttributeDecoder::Init(PointCloudDecoder *decoder, - int attribute_id) { - if (!SequentialAttributeDecoder::Init(decoder, attribute_id)) { - return false; - } - return true; -} - -bool SequentialIntegerAttributeDecoder::TransformAttributeToOriginalFormat( - const std::vector &point_ids) { -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (decoder() && - decoder()->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 0)) { - return true; // Don't revert the transform here for older files. - } -#endif - return StoreValues(static_cast(point_ids.size())); -} - -bool SequentialIntegerAttributeDecoder::DecodeValues( - const std::vector &point_ids, DecoderBuffer *in_buffer) { - // Decode prediction scheme. - int8_t prediction_scheme_method; - if (!in_buffer->Decode(&prediction_scheme_method)) { - return false; - } - if (prediction_scheme_method != PREDICTION_NONE) { - int8_t prediction_transform_type; - if (!in_buffer->Decode(&prediction_transform_type)) { - return false; - } - // Check that decoded prediction scheme transform type is valid. - if (prediction_transform_type < PREDICTION_TRANSFORM_NONE || - prediction_transform_type >= NUM_PREDICTION_SCHEME_TRANSFORM_TYPES) { - return false; - } - prediction_scheme_ = CreateIntPredictionScheme( - static_cast(prediction_scheme_method), - static_cast(prediction_transform_type)); - } - - if (prediction_scheme_) { - if (!InitPredictionScheme(prediction_scheme_.get())) { - return false; - } - } - - if (!DecodeIntegerValues(point_ids, in_buffer)) { - return false; - } - -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - const int32_t num_values = static_cast(point_ids.size()); - if (decoder() && - decoder()->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 0)) { - // For older files, revert the transform right after we decode the data. - if (!StoreValues(num_values)) { - return false; - } - } -#endif - return true; -} - -std::unique_ptr> -SequentialIntegerAttributeDecoder::CreateIntPredictionScheme( - PredictionSchemeMethod method, - PredictionSchemeTransformType transform_type) { - if (transform_type != PREDICTION_TRANSFORM_WRAP) { - return nullptr; // For now we support only wrap transform. - } - return CreatePredictionSchemeForDecoder< - int32_t, PredictionSchemeWrapDecodingTransform>( - method, attribute_id(), decoder()); -} - -bool SequentialIntegerAttributeDecoder::DecodeIntegerValues( - const std::vector &point_ids, DecoderBuffer *in_buffer) { - const int num_components = GetNumValueComponents(); - if (num_components <= 0) { - return false; - } - const size_t num_entries = point_ids.size(); - const size_t num_values = num_entries * num_components; - PreparePortableAttribute(static_cast(num_entries), num_components); - int32_t *const portable_attribute_data = GetPortableAttributeData(); - if (portable_attribute_data == nullptr) { - return false; - } - uint8_t compressed; - if (!in_buffer->Decode(&compressed)) { - return false; - } - if (compressed > 0) { - // Decode compressed values. - if (!DecodeSymbols(static_cast(num_values), num_components, - in_buffer, - reinterpret_cast(portable_attribute_data))) { - return false; - } - } else { - // Decode the integer data directly. - // Get the number of bytes for a given entry. - uint8_t num_bytes; - if (!in_buffer->Decode(&num_bytes)) { - return false; - } - if (num_bytes == DataTypeLength(DT_INT32)) { - if (portable_attribute()->buffer()->data_size() < - sizeof(int32_t) * num_values) { - return false; - } - if (!in_buffer->Decode(portable_attribute_data, - sizeof(int32_t) * num_values)) { - return false; - } - } else { - if (portable_attribute()->buffer()->data_size() < - num_bytes * num_values) { - return false; - } - if (in_buffer->remaining_size() < - static_cast(num_bytes) * static_cast(num_values)) { - return false; - } - for (size_t i = 0; i < num_values; ++i) { - if (!in_buffer->Decode(portable_attribute_data + i, num_bytes)) - return false; - } - } - } - - if (num_values > 0 && (prediction_scheme_ == nullptr || - !prediction_scheme_->AreCorrectionsPositive())) { - // Convert the values back to the original signed format. - ConvertSymbolsToSignedInts( - reinterpret_cast(portable_attribute_data), - static_cast(num_values), portable_attribute_data); - } - - // If the data was encoded with a prediction scheme, we must revert it. - if (prediction_scheme_) { - if (!prediction_scheme_->DecodePredictionData(in_buffer)) { - return false; - } - - if (num_values > 0) { - if (!prediction_scheme_->ComputeOriginalValues( - portable_attribute_data, portable_attribute_data, - static_cast(num_values), num_components, point_ids.data())) { - return false; - } - } - } - return true; -} - -bool SequentialIntegerAttributeDecoder::StoreValues(uint32_t num_values) { - switch (attribute()->data_type()) { - case DT_UINT8: - StoreTypedValues(num_values); - break; - case DT_INT8: - StoreTypedValues(num_values); - break; - case DT_UINT16: - StoreTypedValues(num_values); - break; - case DT_INT16: - StoreTypedValues(num_values); - break; - case DT_UINT32: - StoreTypedValues(num_values); - break; - case DT_INT32: - StoreTypedValues(num_values); - break; - default: - return false; - } - return true; -} - -template -void SequentialIntegerAttributeDecoder::StoreTypedValues(uint32_t num_values) { - const int num_components = attribute()->num_components(); - const int entry_size = sizeof(AttributeTypeT) * num_components; - const std::unique_ptr att_val( - new AttributeTypeT[num_components]); - const int32_t *const portable_attribute_data = GetPortableAttributeData(); - int val_id = 0; - int out_byte_pos = 0; - for (uint32_t i = 0; i < num_values; ++i) { - for (int c = 0; c < num_components; ++c) { - const AttributeTypeT value = - static_cast(portable_attribute_data[val_id++]); - att_val[c] = value; - } - // Store the integer value into the attribute buffer. - attribute()->buffer()->Write(out_byte_pos, att_val.get(), entry_size); - out_byte_pos += entry_size; - } -} - -void SequentialIntegerAttributeDecoder::PreparePortableAttribute( - int num_entries, int num_components) { - GeometryAttribute va; - va.Init(attribute()->attribute_type(), nullptr, num_components, DT_INT32, - false, num_components * DataTypeLength(DT_INT32), 0); - std::unique_ptr port_att(new PointAttribute(va)); - port_att->SetIdentityMapping(); - port_att->Reset(num_entries); - SetPortableAttribute(std::move(port_att)); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.h deleted file mode 100644 index ef48ed8..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h" -#include "draco/compression/attributes/sequential_attribute_decoder.h" -#include "draco/draco_features.h" - -namespace draco { - -// Decoder for attributes encoded with the SequentialIntegerAttributeEncoder. -class SequentialIntegerAttributeDecoder : public SequentialAttributeDecoder { - public: - SequentialIntegerAttributeDecoder(); - bool Init(PointCloudDecoder *decoder, int attribute_id) override; - - bool TransformAttributeToOriginalFormat( - const std::vector &point_ids) override; - - protected: - bool DecodeValues(const std::vector &point_ids, - DecoderBuffer *in_buffer) override; - virtual bool DecodeIntegerValues(const std::vector &point_ids, - DecoderBuffer *in_buffer); - - // Returns a prediction scheme that should be used for decoding of the - // integer values. - virtual std::unique_ptr> - CreateIntPredictionScheme(PredictionSchemeMethod method, - PredictionSchemeTransformType transform_type); - - // Returns the number of integer attribute components. In general, this - // can be different from the number of components of the input attribute. - virtual int32_t GetNumValueComponents() const { - return attribute()->num_components(); - } - - // Called after all integer values are decoded. The implementation should - // use this method to store the values into the attribute. - virtual bool StoreValues(uint32_t num_values); - - void PreparePortableAttribute(int num_entries, int num_components); - - int32_t *GetPortableAttributeData() { - if (portable_attribute()->size() == 0) { - return nullptr; - } - return reinterpret_cast( - portable_attribute()->GetAddress(AttributeValueIndex(0))); - } - - private: - // Stores decoded values into the attribute with a data type AttributeTypeT. - template - void StoreTypedValues(uint32_t num_values); - - std::unique_ptr> - prediction_scheme_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoder.cc deleted file mode 100644 index e66a0a8..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoder.cc +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_integer_attribute_encoder.h" - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h" -#include "draco/compression/entropy/symbol_encoding.h" -#include "draco/core/bit_utils.h" - -namespace draco { - -SequentialIntegerAttributeEncoder::SequentialIntegerAttributeEncoder() {} - -bool SequentialIntegerAttributeEncoder::Init(PointCloudEncoder *encoder, - int attribute_id) { - if (!SequentialAttributeEncoder::Init(encoder, attribute_id)) { - return false; - } - if (GetUniqueId() == SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER) { - // When encoding integers, this encoder currently works only for integer - // attributes up to 32 bits. - switch (attribute()->data_type()) { - case DT_INT8: - case DT_UINT8: - case DT_INT16: - case DT_UINT16: - case DT_INT32: - case DT_UINT32: - break; - default: - return false; - } - } - // Init prediction scheme. - const PredictionSchemeMethod prediction_scheme_method = - GetPredictionMethodFromOptions(attribute_id, *encoder->options()); - - prediction_scheme_ = CreateIntPredictionScheme(prediction_scheme_method); - - if (prediction_scheme_ && !InitPredictionScheme(prediction_scheme_.get())) { - prediction_scheme_ = nullptr; - } - - return true; -} - -bool SequentialIntegerAttributeEncoder::TransformAttributeToPortableFormat( - const std::vector &point_ids) { - if (encoder()) { - if (!PrepareValues(point_ids, encoder()->point_cloud()->num_points())) { - return false; - } - } else { - if (!PrepareValues(point_ids, 0)) { - return false; - } - } - - // Update point to attribute mapping with the portable attribute if the - // attribute is a parent attribute (for now, we can skip it otherwise). - if (is_parent_encoder()) { - // First create map between original attribute value indices and new ones - // (determined by the encoding order). - const PointAttribute *const orig_att = attribute(); - PointAttribute *const portable_att = portable_attribute(); - IndexTypeVector - value_to_value_map(orig_att->size()); - for (int i = 0; i < point_ids.size(); ++i) { - value_to_value_map[orig_att->mapped_index(point_ids[i])] = - AttributeValueIndex(i); - } - if (portable_att->is_mapping_identity()) { - portable_att->SetExplicitMapping(encoder()->point_cloud()->num_points()); - } - // Go over all points of the original attribute and update the mapping in - // the portable attribute. - for (PointIndex i(0); i < encoder()->point_cloud()->num_points(); ++i) { - portable_att->SetPointMapEntry( - i, value_to_value_map[orig_att->mapped_index(i)]); - } - } - return true; -} - -std::unique_ptr> -SequentialIntegerAttributeEncoder::CreateIntPredictionScheme( - PredictionSchemeMethod method) { - return CreatePredictionSchemeForEncoder< - int32_t, PredictionSchemeWrapEncodingTransform>( - method, attribute_id(), encoder()); -} - -bool SequentialIntegerAttributeEncoder::EncodeValues( - const std::vector &point_ids, EncoderBuffer *out_buffer) { - // Initialize general quantization data. - const PointAttribute *const attrib = attribute(); - if (attrib->size() == 0) { - return true; - } - - int8_t prediction_scheme_method = PREDICTION_NONE; - if (prediction_scheme_) { - if (!SetPredictionSchemeParentAttributes(prediction_scheme_.get())) { - return false; - } - prediction_scheme_method = - static_cast(prediction_scheme_->GetPredictionMethod()); - } - out_buffer->Encode(prediction_scheme_method); - if (prediction_scheme_) { - out_buffer->Encode( - static_cast(prediction_scheme_->GetTransformType())); - } - - const int num_components = portable_attribute()->num_components(); - const int num_values = - static_cast(num_components * portable_attribute()->size()); - const int32_t *const portable_attribute_data = GetPortableAttributeData(); - - // We need to keep the portable data intact, but several encoding steps can - // result in changes of this data, e.g., by applying prediction schemes that - // change the data in place. To preserve the portable data we store and - // process all encoded data in a separate array. - std::vector encoded_data(num_values); - - // All integer values are initialized. Process them using the prediction - // scheme if we have one. - if (prediction_scheme_) { - prediction_scheme_->ComputeCorrectionValues( - portable_attribute_data, &encoded_data[0], num_values, num_components, - point_ids.data()); - } - - if (prediction_scheme_ == nullptr || - !prediction_scheme_->AreCorrectionsPositive()) { - const int32_t *const input = - prediction_scheme_ ? encoded_data.data() : portable_attribute_data; - ConvertSignedIntsToSymbols(input, num_values, - reinterpret_cast(&encoded_data[0])); - } - - if (encoder() == nullptr || encoder()->options()->GetGlobalBool( - "use_built_in_attribute_compression", true)) { - out_buffer->Encode(static_cast(1)); - Options symbol_encoding_options; - if (encoder() != nullptr) { - SetSymbolEncodingCompressionLevel(&symbol_encoding_options, - 10 - encoder()->options()->GetSpeed()); - } - if (!EncodeSymbols(reinterpret_cast(encoded_data.data()), - static_cast(point_ids.size()) * num_components, - num_components, &symbol_encoding_options, out_buffer)) { - return false; - } - } else { - // No compression. Just store the raw integer values, using the number of - // bytes as needed. - - // To compute the maximum bit-length, first OR all values. - uint32_t masked_value = 0; - for (uint32_t i = 0; i < static_cast(num_values); ++i) { - masked_value |= encoded_data[i]; - } - // Compute the msb of the ORed value. - int value_msb_pos = 0; - if (masked_value != 0) { - value_msb_pos = MostSignificantBit(masked_value); - } - const int num_bytes = 1 + value_msb_pos / 8; - - out_buffer->Encode(static_cast(0)); - out_buffer->Encode(static_cast(num_bytes)); - - if (num_bytes == DataTypeLength(DT_INT32)) { - out_buffer->Encode(encoded_data.data(), sizeof(int32_t) * num_values); - } else { - for (uint32_t i = 0; i < static_cast(num_values); ++i) { - out_buffer->Encode(encoded_data.data() + i, num_bytes); - } - } - } - if (prediction_scheme_) { - prediction_scheme_->EncodePredictionData(out_buffer); - } - return true; -} - -bool SequentialIntegerAttributeEncoder::PrepareValues( - const std::vector &point_ids, int num_points) { - // Convert all values to int32_t format. - const PointAttribute *const attrib = attribute(); - const int num_components = attrib->num_components(); - const int num_entries = static_cast(point_ids.size()); - PreparePortableAttribute(num_entries, num_components, num_points); - int32_t dst_index = 0; - int32_t *const portable_attribute_data = GetPortableAttributeData(); - for (PointIndex pi : point_ids) { - const AttributeValueIndex att_id = attrib->mapped_index(pi); - if (!attrib->ConvertValue(att_id, - portable_attribute_data + dst_index)) { - return false; - } - dst_index += num_components; - } - return true; -} - -void SequentialIntegerAttributeEncoder::PreparePortableAttribute( - int num_entries, int num_components, int num_points) { - GeometryAttribute va; - va.Init(attribute()->attribute_type(), nullptr, num_components, DT_INT32, - false, num_components * DataTypeLength(DT_INT32), 0); - std::unique_ptr port_att(new PointAttribute(va)); - port_att->Reset(num_entries); - SetPortableAttribute(std::move(port_att)); - if (num_points) { - portable_attribute()->SetExplicitMapping(num_points); - } -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoder.h deleted file mode 100644 index c1d6222..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoder.h +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_H_ - -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h" -#include "draco/compression/attributes/sequential_attribute_encoder.h" - -namespace draco { - -// Attribute encoder designed for lossless encoding of integer attributes. The -// attribute values can be pre-processed by a prediction scheme and compressed -// with a built-in entropy coder. -class SequentialIntegerAttributeEncoder : public SequentialAttributeEncoder { - public: - SequentialIntegerAttributeEncoder(); - uint8_t GetUniqueId() const override { - return SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER; - } - - bool Init(PointCloudEncoder *encoder, int attribute_id) override; - bool TransformAttributeToPortableFormat( - const std::vector &point_ids) override; - - protected: - bool EncodeValues(const std::vector &point_ids, - EncoderBuffer *out_buffer) override; - - // Returns a prediction scheme that should be used for encoding of the - // integer values. - virtual std::unique_ptr> - CreateIntPredictionScheme(PredictionSchemeMethod method); - - // Prepares the integer values that are going to be encoded. - virtual bool PrepareValues(const std::vector &point_ids, - int num_points); - - void PreparePortableAttribute(int num_entries, int num_components, - int num_points); - - int32_t *GetPortableAttributeData() { - return reinterpret_cast( - portable_attribute()->GetAddress(AttributeValueIndex(0))); - } - - private: - // Optional prediction scheme can be used to modify the integer values in - // order to make them easier to compress. - std::unique_ptr> - prediction_scheme_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoding_test.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoding_test.cc deleted file mode 100644 index 44485e6..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_integer_attribute_encoding_test.cc +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include - -#include "draco/compression/attributes/sequential_integer_attribute_decoder.h" -#include "draco/compression/attributes/sequential_integer_attribute_encoder.h" -#include "draco/compression/config/compression_shared.h" -#include "draco/core/draco_test_base.h" - -namespace draco { - -class SequentialIntegerAttributeEncodingTest : public ::testing::Test { - protected: -}; - -TEST_F(SequentialIntegerAttributeEncodingTest, DoesCompress) { - // This test verifies that IntegerEncoding encodes and decodes the given data. - const std::vector values{1, 8, 7, 5, 5, 5, 9, - 155, -6, -9, 9, 125, 1, 0}; - PointAttribute pa; - pa.Init(GeometryAttribute::GENERIC, 1, DT_INT32, false, values.size()); - for (uint32_t i = 0; i < values.size(); ++i) { - pa.SetAttributeValue(AttributeValueIndex(i), &values[i]); - } - // List of point ids from 0 to point_ids.size() - 1. - std::vector point_ids(values.size()); - std::iota(point_ids.begin(), point_ids.end(), 0); - - EncoderBuffer out_buf; - SequentialIntegerAttributeEncoder ie; - ASSERT_TRUE(ie.InitializeStandalone(&pa)); - ASSERT_TRUE(ie.TransformAttributeToPortableFormat(point_ids)); - ASSERT_TRUE(ie.EncodePortableAttribute(point_ids, &out_buf)); - ASSERT_TRUE(ie.EncodeDataNeededByPortableTransform(&out_buf)); - - DecoderBuffer in_buf; - in_buf.Init(out_buf.data(), out_buf.size()); - in_buf.set_bitstream_version(kDracoMeshBitstreamVersion); - SequentialIntegerAttributeDecoder id; - ASSERT_TRUE(id.InitializeStandalone(&pa)); - ASSERT_TRUE(id.DecodePortableAttribute(point_ids, &in_buf)); - ASSERT_TRUE(id.DecodeDataNeededByPortableTransform(point_ids, &in_buf)); - ASSERT_TRUE(id.TransformAttributeToOriginalFormat(point_ids)); - - for (uint32_t i = 0; i < values.size(); ++i) { - int32_t entry_val; - pa.GetValue(AttributeValueIndex(i), &entry_val); - ASSERT_EQ(entry_val, values[i]); - } -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.cc deleted file mode 100644 index de36c1c..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.cc +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_normal_attribute_decoder.h" - -#include "draco/compression/attributes/normal_compression_utils.h" - -namespace draco { - -SequentialNormalAttributeDecoder::SequentialNormalAttributeDecoder() {} - -bool SequentialNormalAttributeDecoder::Init(PointCloudDecoder *decoder, - int attribute_id) { - if (!SequentialIntegerAttributeDecoder::Init(decoder, attribute_id)) { - return false; - } - // Currently, this encoder works only for 3-component normal vectors. - if (attribute()->num_components() != 3) { - return false; - } - // Also the data type must be DT_FLOAT32. - if (attribute()->data_type() != DT_FLOAT32) { - return false; - } - return true; -} - -bool SequentialNormalAttributeDecoder::DecodeIntegerValues( - const std::vector &point_ids, DecoderBuffer *in_buffer) { -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (decoder()->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 0)) { - // Note: in older bitstreams, we do not have a PortableAttribute() decoded - // at this stage so we cannot pass it down to the DecodeParameters() call. - // It still works fine for octahedral transform because it does not need to - // use any data from the attribute. - if (!octahedral_transform_.DecodeParameters(*attribute(), in_buffer)) { - return false; - } - } -#endif - return SequentialIntegerAttributeDecoder::DecodeIntegerValues(point_ids, - in_buffer); -} - -bool SequentialNormalAttributeDecoder::DecodeDataNeededByPortableTransform( - const std::vector &point_ids, DecoderBuffer *in_buffer) { - if (decoder()->bitstream_version() >= DRACO_BITSTREAM_VERSION(2, 0)) { - // For newer file version, decode attribute transform data here. - if (!octahedral_transform_.DecodeParameters(*GetPortableAttribute(), - in_buffer)) { - return false; - } - } - - // Store the decoded transform data in portable attribute. - return octahedral_transform_.TransferToAttribute(portable_attribute()); -} - -bool SequentialNormalAttributeDecoder::StoreValues(uint32_t num_points) { - // Convert all quantized values back to floats. - return octahedral_transform_.InverseTransformAttribute( - *GetPortableAttribute(), attribute()); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.h deleted file mode 100644 index 8c2d801..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_H_ - -#include "draco/attributes/attribute_octahedron_transform.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h" -#include "draco/compression/attributes/sequential_integer_attribute_decoder.h" -#include "draco/draco_features.h" - -namespace draco { - -// Decoder for attributes encoded with SequentialNormalAttributeEncoder. -class SequentialNormalAttributeDecoder - : public SequentialIntegerAttributeDecoder { - public: - SequentialNormalAttributeDecoder(); - bool Init(PointCloudDecoder *decoder, int attribute_id) override; - - protected: - int32_t GetNumValueComponents() const override { - return 2; // We quantize everything into two components. - } - bool DecodeIntegerValues(const std::vector &point_ids, - DecoderBuffer *in_buffer) override; - bool DecodeDataNeededByPortableTransform( - const std::vector &point_ids, - DecoderBuffer *in_buffer) override; - bool StoreValues(uint32_t num_points) override; - - private: - AttributeOctahedronTransform octahedral_transform_; - - std::unique_ptr> - CreateIntPredictionScheme( - PredictionSchemeMethod method, - PredictionSchemeTransformType transform_type) override { - switch (transform_type) { -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - case PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON: { - typedef PredictionSchemeNormalOctahedronDecodingTransform - Transform; - // At this point the decoder has not read the quantization bits, - // which is why we must construct the transform by default. - // See Transform.DecodeTransformData for more details. - return CreatePredictionSchemeForDecoder( - method, attribute_id(), decoder()); - } -#endif - case PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON_CANONICALIZED: { - typedef PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform< - int32_t> - Transform; - // At this point the decoder has not read the quantization bits, - // which is why we must construct the transform by default. - // See Transform.DecodeTransformData for more details. - return CreatePredictionSchemeForDecoder( - method, attribute_id(), decoder()); - } - default: - return nullptr; // Currently, we support only octahedron transform and - // octahedron transform canonicalized. - } - } -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_encoder.cc deleted file mode 100644 index 2e20e89..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_encoder.cc +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_normal_attribute_encoder.h" - -#include "draco/compression/attributes/normal_compression_utils.h" - -namespace draco { - -bool SequentialNormalAttributeEncoder::Init(PointCloudEncoder *encoder, - int attribute_id) { - if (!SequentialIntegerAttributeEncoder::Init(encoder, attribute_id)) - return false; - // Currently this encoder works only for 3-component normal vectors. - if (attribute()->num_components() != 3) { - return false; - } - - // Initialize AttributeOctahedronTransform. - const int quantization_bits = encoder->options()->GetAttributeInt( - attribute_id, "quantization_bits", -1); - if (quantization_bits < 1) { - return false; - } - attribute_octahedron_transform_.SetParameters(quantization_bits); - return true; -} - -bool SequentialNormalAttributeEncoder::EncodeDataNeededByPortableTransform( - EncoderBuffer *out_buffer) { - return attribute_octahedron_transform_.EncodeParameters(out_buffer); -} - -bool SequentialNormalAttributeEncoder::PrepareValues( - const std::vector &point_ids, int num_points) { - auto portable_att = attribute_octahedron_transform_.InitTransformedAttribute( - *(attribute()), point_ids.size()); - if (!attribute_octahedron_transform_.TransformAttribute( - *(attribute()), point_ids, portable_att.get())) { - return false; - } - SetPortableAttribute(std::move(portable_att)); - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_encoder.h deleted file mode 100644 index 53705c5..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_normal_attribute_encoder.h +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_H_ - -#include "draco/attributes/attribute_octahedron_transform.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h" -#include "draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h" -#include "draco/compression/attributes/sequential_integer_attribute_encoder.h" -#include "draco/compression/config/compression_shared.h" - -namespace draco { - -// Class for encoding normal vectors using an octahedral encoding, see Cigolle -// et al.'14 “A Survey of Efficient Representations for Independent Unit -// Vectors”. Compared to the basic quantization encoder, this encoder results -// in a better compression rate under the same accuracy settings. Note that this -// encoder doesn't preserve the lengths of input vectors, therefore it will not -// work correctly when the input values are not normalized. -class SequentialNormalAttributeEncoder - : public SequentialIntegerAttributeEncoder { - public: - uint8_t GetUniqueId() const override { - return SEQUENTIAL_ATTRIBUTE_ENCODER_NORMALS; - } - bool IsLossyEncoder() const override { return true; } - - bool EncodeDataNeededByPortableTransform(EncoderBuffer *out_buffer) override; - - protected: - bool Init(PointCloudEncoder *encoder, int attribute_id) override; - - // Put quantized values in portable attribute for sequential encoding. - bool PrepareValues(const std::vector &point_ids, - int num_points) override; - - std::unique_ptr> - CreateIntPredictionScheme(PredictionSchemeMethod /* method */) override { - typedef PredictionSchemeNormalOctahedronCanonicalizedEncodingTransform< - int32_t> - Transform; - const int32_t quantization_bits = encoder()->options()->GetAttributeInt( - attribute_id(), "quantization_bits", -1); - const int32_t max_value = (1 << quantization_bits) - 1; - const Transform transform(max_value); - const PredictionSchemeMethod default_prediction_method = - SelectPredictionMethod(attribute_id(), encoder()); - const int32_t prediction_method = encoder()->options()->GetAttributeInt( - attribute_id(), "prediction_scheme", default_prediction_method); - - if (prediction_method == MESH_PREDICTION_GEOMETRIC_NORMAL) { - return CreatePredictionSchemeForEncoder( - MESH_PREDICTION_GEOMETRIC_NORMAL, attribute_id(), encoder(), - transform); - } - if (prediction_method == PREDICTION_DIFFERENCE) { - return CreatePredictionSchemeForEncoder( - PREDICTION_DIFFERENCE, attribute_id(), encoder(), transform); - } - DRACO_DCHECK(false); // Should never be reached. - return nullptr; - } - - // Used for the conversion to quantized normals in octahedral format. - AttributeOctahedronTransform attribute_octahedron_transform_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_decoder.cc deleted file mode 100644 index 3d306e7..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_decoder.cc +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_quantization_attribute_decoder.h" - -#include "draco/core/quantization_utils.h" - -namespace draco { - -SequentialQuantizationAttributeDecoder:: - SequentialQuantizationAttributeDecoder() {} - -bool SequentialQuantizationAttributeDecoder::Init(PointCloudDecoder *decoder, - int attribute_id) { - if (!SequentialIntegerAttributeDecoder::Init(decoder, attribute_id)) { - return false; - } - const PointAttribute *const attribute = - decoder->point_cloud()->attribute(attribute_id); - // Currently we can quantize only floating point arguments. - if (attribute->data_type() != DT_FLOAT32) { - return false; - } - return true; -} - -bool SequentialQuantizationAttributeDecoder::DecodeIntegerValues( - const std::vector &point_ids, DecoderBuffer *in_buffer) { -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (decoder()->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 0) && - !DecodeQuantizedDataInfo()) { - return false; - } -#endif - return SequentialIntegerAttributeDecoder::DecodeIntegerValues(point_ids, - in_buffer); -} - -bool SequentialQuantizationAttributeDecoder:: - DecodeDataNeededByPortableTransform( - const std::vector &point_ids, DecoderBuffer *in_buffer) { - if (decoder()->bitstream_version() >= DRACO_BITSTREAM_VERSION(2, 0)) { - // Decode quantization data here only for files with bitstream version 2.0+ - if (!DecodeQuantizedDataInfo()) { - return false; - } - } - - // Store the decoded transform data in portable attribute; - return quantization_transform_.TransferToAttribute(portable_attribute()); -} - -bool SequentialQuantizationAttributeDecoder::StoreValues(uint32_t num_points) { - return DequantizeValues(num_points); -} - -bool SequentialQuantizationAttributeDecoder::DecodeQuantizedDataInfo() { - // Get attribute used as source for decoding. - auto att = GetPortableAttribute(); - if (att == nullptr) { - // This should happen only in the backward compatibility mode. It will still - // work fine for this case because the only thing the quantization transform - // cares about is the number of components that is the same for both source - // and target attributes. - att = attribute(); - } - return quantization_transform_.DecodeParameters(*att, decoder()->buffer()); -} - -bool SequentialQuantizationAttributeDecoder::DequantizeValues( - uint32_t num_values) { - // Convert all quantized values back to floats. - return quantization_transform_.InverseTransformAttribute( - *GetPortableAttribute(), attribute()); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_decoder.h deleted file mode 100644 index ad372dc..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_decoder.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_H_ - -#include "draco/attributes/attribute_quantization_transform.h" -#include "draco/compression/attributes/sequential_integer_attribute_decoder.h" -#include "draco/draco_features.h" - -namespace draco { - -// Decoder for attribute values encoded with the -// SequentialQuantizationAttributeEncoder. -class SequentialQuantizationAttributeDecoder - : public SequentialIntegerAttributeDecoder { - public: - SequentialQuantizationAttributeDecoder(); - bool Init(PointCloudDecoder *decoder, int attribute_id) override; - - protected: - bool DecodeIntegerValues(const std::vector &point_ids, - DecoderBuffer *in_buffer) override; - bool DecodeDataNeededByPortableTransform( - const std::vector &point_ids, - DecoderBuffer *in_buffer) override; - bool StoreValues(uint32_t num_points) override; - - // Decodes data necessary for dequantizing the encoded values. - virtual bool DecodeQuantizedDataInfo(); - - // Dequantizes all values and stores them into the output attribute. - virtual bool DequantizeValues(uint32_t num_values); - - private: - AttributeQuantizationTransform quantization_transform_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.cc deleted file mode 100644 index d3666f7..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.cc +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/attributes/sequential_quantization_attribute_encoder.h" - -#include "draco/core/quantization_utils.h" - -namespace draco { - -SequentialQuantizationAttributeEncoder:: - SequentialQuantizationAttributeEncoder() {} - -bool SequentialQuantizationAttributeEncoder::Init(PointCloudEncoder *encoder, - int attribute_id) { - if (!SequentialIntegerAttributeEncoder::Init(encoder, attribute_id)) { - return false; - } - // This encoder currently works only for floating point attributes. - const PointAttribute *const attribute = - encoder->point_cloud()->attribute(attribute_id); - if (attribute->data_type() != DT_FLOAT32) { - return false; - } - - // Initialize AttributeQuantizationTransform. - const int quantization_bits = encoder->options()->GetAttributeInt( - attribute_id, "quantization_bits", -1); - if (quantization_bits < 1) { - return false; - } - if (encoder->options()->IsAttributeOptionSet(attribute_id, - "quantization_origin") && - encoder->options()->IsAttributeOptionSet(attribute_id, - "quantization_range")) { - // Quantization settings are explicitly specified in the provided options. - std::vector quantization_origin(attribute->num_components()); - encoder->options()->GetAttributeVector(attribute_id, "quantization_origin", - attribute->num_components(), - &quantization_origin[0]); - const float range = encoder->options()->GetAttributeFloat( - attribute_id, "quantization_range", 1.f); - if (!attribute_quantization_transform_.SetParameters( - quantization_bits, quantization_origin.data(), - attribute->num_components(), range)) { - return false; - } - } else { - // Compute quantization settings from the attribute values. - if (!attribute_quantization_transform_.ComputeParameters( - *attribute, quantization_bits)) { - return false; - } - } - return true; -} - -bool SequentialQuantizationAttributeEncoder:: - EncodeDataNeededByPortableTransform(EncoderBuffer *out_buffer) { - return attribute_quantization_transform_.EncodeParameters(out_buffer); -} - -bool SequentialQuantizationAttributeEncoder::PrepareValues( - const std::vector &point_ids, int num_points) { - auto portable_attribute = - attribute_quantization_transform_.InitTransformedAttribute( - *attribute(), point_ids.size()); - if (!attribute_quantization_transform_.TransformAttribute( - *(attribute()), point_ids, portable_attribute.get())) { - return false; - } - SetPortableAttribute(std::move(portable_attribute)); - return true; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.h deleted file mode 100644 index e9762bd..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_H_ -#define DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_H_ - -#include "draco/attributes/attribute_quantization_transform.h" -#include "draco/compression/attributes/sequential_integer_attribute_encoder.h" - -namespace draco { - -class MeshEncoder; - -// Attribute encoder that quantizes floating point attribute values. The -// quantized values can be optionally compressed using an entropy coding. -class SequentialQuantizationAttributeEncoder - : public SequentialIntegerAttributeEncoder { - public: - SequentialQuantizationAttributeEncoder(); - uint8_t GetUniqueId() const override { - return SEQUENTIAL_ATTRIBUTE_ENCODER_QUANTIZATION; - } - bool Init(PointCloudEncoder *encoder, int attribute_id) override; - - bool IsLossyEncoder() const override { return true; } - - bool EncodeDataNeededByPortableTransform(EncoderBuffer *out_buffer) override; - - protected: - // Put quantized values in portable attribute for sequential encoding. - bool PrepareValues(const std::vector &point_ids, - int num_points) override; - - private: - // Used for the quantization. - AttributeQuantizationTransform attribute_quantization_transform_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ATTRIBUTES_SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h deleted file mode 100644 index faacbd5..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides shared functions for adaptive rANS bit coding. -#ifndef DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_ -#define DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_ - -#include "draco/core/macros.h" - -namespace draco { - -// Clamp the probability p to a uint8_t in the range [1,255]. -inline uint8_t clamp_probability(double p) { - DRACO_DCHECK_LE(p, 1.0); - DRACO_DCHECK_LE(0.0, p); - uint32_t p_int = static_cast((p * 256) + 0.5); - p_int -= (p_int == 256); - p_int += (p_int == 0); - return static_cast(p_int); -} - -// Update the probability according to new incoming bit. -inline double update_probability(double old_p, bool bit) { - static constexpr double w = 128.0; - static constexpr double w0 = (w - 1.0) / w; - static constexpr double w1 = 1.0 / w; - return old_p * w0 + (!bit) * w1; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_decoder.cc deleted file mode 100644 index 056842c..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_decoder.cc +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/bit_coders/adaptive_rans_bit_decoder.h" - -#include "draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h" - -namespace draco { - -AdaptiveRAnsBitDecoder::AdaptiveRAnsBitDecoder() : p0_f_(0.5) {} - -AdaptiveRAnsBitDecoder::~AdaptiveRAnsBitDecoder() { Clear(); } - -bool AdaptiveRAnsBitDecoder::StartDecoding(DecoderBuffer *source_buffer) { - Clear(); - - uint32_t size_in_bytes; - if (!source_buffer->Decode(&size_in_bytes)) { - return false; - } - if (size_in_bytes > source_buffer->remaining_size()) { - return false; - } - if (ans_read_init(&ans_decoder_, - reinterpret_cast( - const_cast(source_buffer->data_head())), - size_in_bytes) != 0) { - return false; - } - source_buffer->Advance(size_in_bytes); - return true; -} - -bool AdaptiveRAnsBitDecoder::DecodeNextBit() { - const uint8_t p0 = clamp_probability(p0_f_); - const bool bit = static_cast(rabs_read(&ans_decoder_, p0)); - p0_f_ = update_probability(p0_f_, bit); - return bit; -} - -void AdaptiveRAnsBitDecoder::DecodeLeastSignificantBits32(int nbits, - uint32_t *value) { - DRACO_DCHECK_EQ(true, nbits <= 32); - DRACO_DCHECK_EQ(true, nbits > 0); - - uint32_t result = 0; - while (nbits) { - result = (result << 1) + DecodeNextBit(); - --nbits; - } - *value = result; -} - -void AdaptiveRAnsBitDecoder::Clear() { - ans_read_end(&ans_decoder_); - p0_f_ = 0.5; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_decoder.h deleted file mode 100644 index a1ea011..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_decoder.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides basic classes and functions for rANS bit decoding. -#ifndef DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_ - -#include - -#include "draco/compression/entropy/ans.h" -#include "draco/core/decoder_buffer.h" - -namespace draco { - -// Class for decoding a sequence of bits that were encoded with -// AdaptiveRAnsBitEncoder. -class AdaptiveRAnsBitDecoder { - public: - AdaptiveRAnsBitDecoder(); - ~AdaptiveRAnsBitDecoder(); - - // Sets |source_buffer| as the buffer to decode bits from. - bool StartDecoding(DecoderBuffer *source_buffer); - - // Decode one bit. Returns true if the bit is a 1, otherwise false. - bool DecodeNextBit(); - - // Decode the next |nbits| and return the sequence in |value|. |nbits| must be - // > 0 and <= 32. - void DecodeLeastSignificantBits32(int nbits, uint32_t *value); - - void EndDecoding() {} - - private: - void Clear(); - - AnsDecoder ans_decoder_; - double p0_f_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_encoder.cc deleted file mode 100644 index 5ce9dc3..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_encoder.cc +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/bit_coders/adaptive_rans_bit_encoder.h" - -#include "draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h" - -namespace draco { - -AdaptiveRAnsBitEncoder::AdaptiveRAnsBitEncoder() {} - -AdaptiveRAnsBitEncoder::~AdaptiveRAnsBitEncoder() { Clear(); } - -void AdaptiveRAnsBitEncoder::StartEncoding() { Clear(); } - -void AdaptiveRAnsBitEncoder::EndEncoding(EncoderBuffer *target_buffer) { - // Buffer for ans to write. - std::vector buffer(bits_.size() + 16); - AnsCoder ans_coder; - ans_write_init(&ans_coder, buffer.data()); - - // Unfortunately we have to encode the bits in reversed order, while the - // probabilities that should be given are those of the forward sequence. - double p0_f = 0.5; - std::vector p0s; - p0s.reserve(bits_.size()); - for (bool b : bits_) { - p0s.push_back(clamp_probability(p0_f)); - p0_f = update_probability(p0_f, b); - } - auto bit = bits_.rbegin(); - auto pit = p0s.rbegin(); - while (bit != bits_.rend()) { - rabs_write(&ans_coder, *bit, *pit); - ++bit; - ++pit; - } - - const uint32_t size_in_bytes = ans_write_end(&ans_coder); - target_buffer->Encode(size_in_bytes); - target_buffer->Encode(buffer.data(), size_in_bytes); - - Clear(); -} - -void AdaptiveRAnsBitEncoder::Clear() { bits_.clear(); } - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_encoder.h deleted file mode 100644 index 9b18328..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/adaptive_rans_bit_encoder.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides basic classes and functions for rANS bit encoding. -#ifndef DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_ - -#include - -#include "draco/compression/entropy/ans.h" -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// Class for adaptive encoding a sequence of bits using rANS. -class AdaptiveRAnsBitEncoder { - public: - AdaptiveRAnsBitEncoder(); - ~AdaptiveRAnsBitEncoder(); - - // Must be called before any Encode* function is called. - void StartEncoding(); - - // Encode one bit. If |bit| is true encode a 1, otherwise encode a 0. - void EncodeBit(bool bit) { bits_.push_back(bit); } - - // Encode |nbits| of |value|, starting from the least significant bit. - // |nbits| must be > 0 and <= 32. - void EncodeLeastSignificantBits32(int nbits, uint32_t value) { - DRACO_DCHECK_EQ(true, nbits <= 32); - DRACO_DCHECK_EQ(true, nbits > 0); - uint32_t selector = (1 << (nbits - 1)); - while (selector) { - EncodeBit(value & selector); - selector = selector >> 1; - } - } - - // Ends the bit encoding and stores the result into the target_buffer. - void EndEncoding(EncoderBuffer *target_buffer); - - private: - void Clear(); - - std::vector bits_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_decoder.cc deleted file mode 100644 index 2abe338..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_decoder.cc +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/bit_coders/direct_bit_decoder.h" - -namespace draco { - -DirectBitDecoder::DirectBitDecoder() : pos_(bits_.end()), num_used_bits_(0) {} - -DirectBitDecoder::~DirectBitDecoder() { Clear(); } - -bool DirectBitDecoder::StartDecoding(DecoderBuffer *source_buffer) { - Clear(); - uint32_t size_in_bytes; - if (!source_buffer->Decode(&size_in_bytes)) { - return false; - } - - // Check that size_in_bytes is > 0 and a multiple of 4 as the encoder always - // encodes 32 bit elements. - if (size_in_bytes == 0 || size_in_bytes & 0x3) { - return false; - } - if (size_in_bytes > source_buffer->remaining_size()) { - return false; - } - const uint32_t num_32bit_elements = size_in_bytes / 4; - bits_.resize(num_32bit_elements); - if (!source_buffer->Decode(bits_.data(), size_in_bytes)) { - return false; - } - pos_ = bits_.begin(); - num_used_bits_ = 0; - return true; -} - -void DirectBitDecoder::Clear() { - bits_.clear(); - num_used_bits_ = 0; - pos_ = bits_.end(); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_decoder.h deleted file mode 100644 index b9fbc2d..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_decoder.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides direct encoding of bits with arithmetic encoder interface. -#ifndef DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_DECODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_DECODER_H_ - -#include - -#include "draco/core/decoder_buffer.h" - -namespace draco { - -class DirectBitDecoder { - public: - DirectBitDecoder(); - ~DirectBitDecoder(); - - // Sets |source_buffer| as the buffer to decode bits from. - bool StartDecoding(DecoderBuffer *source_buffer); - - // Decode one bit. Returns true if the bit is a 1, otherwise false. - bool DecodeNextBit() { - const uint32_t selector = 1 << (31 - num_used_bits_); - if (pos_ == bits_.end()) { - return false; - } - const bool bit = *pos_ & selector; - ++num_used_bits_; - if (num_used_bits_ == 32) { - ++pos_; - num_used_bits_ = 0; - } - return bit; - } - - // Decode the next |nbits| and return the sequence in |value|. |nbits| must be - // > 0 and <= 32. - void DecodeLeastSignificantBits32(int nbits, uint32_t *value) { - DRACO_DCHECK_EQ(true, nbits <= 32); - DRACO_DCHECK_EQ(true, nbits > 0); - const int remaining = 32 - num_used_bits_; - if (nbits <= remaining) { - if (pos_ == bits_.end()) { - *value = 0; - return; - } - *value = (*pos_ << num_used_bits_) >> (32 - nbits); - num_used_bits_ += nbits; - if (num_used_bits_ == 32) { - ++pos_; - num_used_bits_ = 0; - } - } else { - if (pos_ + 1 == bits_.end()) { - *value = 0; - return; - } - const uint32_t value_l = ((*pos_) << num_used_bits_); - num_used_bits_ = nbits - remaining; - ++pos_; - const uint32_t value_r = (*pos_) >> (32 - num_used_bits_); - *value = (value_l >> (32 - num_used_bits_ - remaining)) | value_r; - } - } - - void EndDecoding() {} - - private: - void Clear(); - - std::vector bits_; - std::vector::const_iterator pos_; - uint32_t num_used_bits_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_encoder.cc deleted file mode 100644 index d39143c..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_encoder.cc +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/bit_coders/direct_bit_encoder.h" - -namespace draco { - -DirectBitEncoder::DirectBitEncoder() : local_bits_(0), num_local_bits_(0) {} - -DirectBitEncoder::~DirectBitEncoder() { Clear(); } - -void DirectBitEncoder::StartEncoding() { Clear(); } - -void DirectBitEncoder::EndEncoding(EncoderBuffer *target_buffer) { - bits_.push_back(local_bits_); - const uint32_t size_in_byte = static_cast(bits_.size()) * 4; - target_buffer->Encode(size_in_byte); - target_buffer->Encode(bits_.data(), size_in_byte); - Clear(); -} - -void DirectBitEncoder::Clear() { - bits_.clear(); - local_bits_ = 0; - num_local_bits_ = 0; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_encoder.h deleted file mode 100644 index 705b2ca..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/direct_bit_encoder.h +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides direct encoding of bits with arithmetic encoder interface. -#ifndef DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_ENCODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_ENCODER_H_ - -#include - -#include "draco/core/encoder_buffer.h" - -namespace draco { - -class DirectBitEncoder { - public: - DirectBitEncoder(); - ~DirectBitEncoder(); - - // Must be called before any Encode* function is called. - void StartEncoding(); - - // Encode one bit. If |bit| is true encode a 1, otherwise encode a 0. - void EncodeBit(bool bit) { - if (bit) { - local_bits_ |= 1 << (31 - num_local_bits_); - } - num_local_bits_++; - if (num_local_bits_ == 32) { - bits_.push_back(local_bits_); - num_local_bits_ = 0; - local_bits_ = 0; - } - } - - // Encode |nbits| of |value|, starting from the least significant bit. - // |nbits| must be > 0 and <= 32. - void EncodeLeastSignificantBits32(int nbits, uint32_t value) { - DRACO_DCHECK_EQ(true, nbits <= 32); - DRACO_DCHECK_EQ(true, nbits > 0); - - const int remaining = 32 - num_local_bits_; - - // Make sure there are no leading bits that should not be encoded and - // start from here. - value = value << (32 - nbits); - if (nbits <= remaining) { - value = value >> num_local_bits_; - local_bits_ = local_bits_ | value; - num_local_bits_ += nbits; - if (num_local_bits_ == 32) { - bits_.push_back(local_bits_); - local_bits_ = 0; - num_local_bits_ = 0; - } - } else { - value = value >> (32 - nbits); - num_local_bits_ = nbits - remaining; - const uint32_t value_l = value >> num_local_bits_; - local_bits_ = local_bits_ | value_l; - bits_.push_back(local_bits_); - local_bits_ = value << (32 - num_local_bits_); - } - } - - // Ends the bit encoding and stores the result into the target_buffer. - void EndEncoding(EncoderBuffer *target_buffer); - - private: - void Clear(); - - std::vector bits_; - uint32_t local_bits_; - uint32_t num_local_bits_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/folded_integer_bit_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/folded_integer_bit_decoder.h deleted file mode 100644 index c14058b..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/folded_integer_bit_decoder.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides direct encoding of bits with arithmetic encoder interface. -#ifndef DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_ - -#include - -#include "draco/core/decoder_buffer.h" - -namespace draco { - -// See FoldedBit32Encoder for more details. -template -class FoldedBit32Decoder { - public: - FoldedBit32Decoder() {} - ~FoldedBit32Decoder() {} - - // Sets |source_buffer| as the buffer to decode bits from. - bool StartDecoding(DecoderBuffer *source_buffer) { - for (int i = 0; i < 32; i++) { - if (!folded_number_decoders_[i].StartDecoding(source_buffer)) { - return false; - } - } - return bit_decoder_.StartDecoding(source_buffer); - } - - // Decode one bit. Returns true if the bit is a 1, otherwise false. - bool DecodeNextBit() { return bit_decoder_.DecodeNextBit(); } - - // Decode the next |nbits| and return the sequence in |value|. |nbits| must be - // > 0 and <= 32. - void DecodeLeastSignificantBits32(int nbits, uint32_t *value) { - uint32_t result = 0; - for (int i = 0; i < nbits; ++i) { - const bool bit = folded_number_decoders_[i].DecodeNextBit(); - result = (result << 1) + bit; - } - *value = result; - } - - void EndDecoding() { - for (int i = 0; i < 32; i++) { - folded_number_decoders_[i].EndDecoding(); - } - bit_decoder_.EndDecoding(); - } - - private: - void Clear() { - for (int i = 0; i < 32; i++) { - folded_number_decoders_[i].Clear(); - } - bit_decoder_.Clear(); - } - - std::array folded_number_decoders_; - BitDecoderT bit_decoder_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/folded_integer_bit_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/folded_integer_bit_encoder.h deleted file mode 100644 index 375b38a..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/folded_integer_bit_encoder.h +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides direct encoding of bits with arithmetic encoder interface. -#ifndef DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_ - -#include - -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// This coding scheme considers every bit of an (up to) 32bit integer as a -// separate context. This can be a significant advantage when encoding numbers -// where it is more likely that the front bits are zero. -// The behavior is essentially the same as other arithmetic encoding schemes, -// the only difference is that encoding and decoding of bits must be absolutely -// symmetric, bits handed in by EncodeBit32 must be also decoded in this way. -// This is the FoldedBit32Encoder, see also FoldedBit32Decoder. -template -class FoldedBit32Encoder { - public: - FoldedBit32Encoder() {} - ~FoldedBit32Encoder() {} - - // Must be called before any Encode* function is called. - void StartEncoding() { - for (int i = 0; i < 32; i++) { - folded_number_encoders_[i].StartEncoding(); - } - bit_encoder_.StartEncoding(); - } - - // Encode one bit. If |bit| is true encode a 1, otherwise encode a 0. - void EncodeBit(bool bit) { bit_encoder_.EncodeBit(bit); } - - // Encode |nbits| of |value|, starting from the least significant bit. - // |nbits| must be > 0 and <= 32. - void EncodeLeastSignificantBits32(int nbits, uint32_t value) { - uint32_t selector = 1 << (nbits - 1); - for (int i = 0; i < nbits; i++) { - const bool bit = (value & selector); - folded_number_encoders_[i].EncodeBit(bit); - selector = selector >> 1; - } - } - - // Ends the bit encoding and stores the result into the target_buffer. - void EndEncoding(EncoderBuffer *target_buffer) { - for (int i = 0; i < 32; i++) { - folded_number_encoders_[i].EndEncoding(target_buffer); - } - bit_encoder_.EndEncoding(target_buffer); - } - - private: - void Clear() { - for (int i = 0; i < 32; i++) { - folded_number_encoders_[i].Clear(); - } - bit_encoder_.Clear(); - } - - std::array folded_number_encoders_; - BitEncoderT bit_encoder_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_decoder.cc deleted file mode 100644 index a9b8fb9..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_decoder.cc +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/bit_coders/rans_bit_decoder.h" - -#include "draco/compression/config/compression_shared.h" -#include "draco/core/bit_utils.h" -#include "draco/core/varint_decoding.h" - -namespace draco { - -RAnsBitDecoder::RAnsBitDecoder() : prob_zero_(0) {} - -RAnsBitDecoder::~RAnsBitDecoder() { Clear(); } - -bool RAnsBitDecoder::StartDecoding(DecoderBuffer *source_buffer) { - Clear(); - - if (!source_buffer->Decode(&prob_zero_)) { - return false; - } - - uint32_t size_in_bytes; -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (source_buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 2)) { - if (!source_buffer->Decode(&size_in_bytes)) { - return false; - } - - } else -#endif - { - if (!DecodeVarint(&size_in_bytes, source_buffer)) { - return false; - } - } - - if (size_in_bytes > source_buffer->remaining_size()) { - return false; - } - - if (ans_read_init(&ans_decoder_, - reinterpret_cast( - const_cast(source_buffer->data_head())), - size_in_bytes) != 0) { - return false; - } - source_buffer->Advance(size_in_bytes); - return true; -} - -bool RAnsBitDecoder::DecodeNextBit() { - const uint8_t bit = rabs_read(&ans_decoder_, prob_zero_); - return bit > 0; -} - -void RAnsBitDecoder::DecodeLeastSignificantBits32(int nbits, uint32_t *value) { - DRACO_DCHECK_EQ(true, nbits <= 32); - DRACO_DCHECK_EQ(true, nbits > 0); - - uint32_t result = 0; - while (nbits) { - result = (result << 1) + DecodeNextBit(); - --nbits; - } - *value = result; -} - -void RAnsBitDecoder::Clear() { ans_read_end(&ans_decoder_); } - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_decoder.h deleted file mode 100644 index 25d243e..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_decoder.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides basic classes and functions for rANS coding. -#ifndef DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_ - -#include - -#include "draco/compression/entropy/ans.h" -#include "draco/core/decoder_buffer.h" -#include "draco/draco_features.h" - -namespace draco { - -// Class for decoding a sequence of bits that were encoded with RAnsBitEncoder. -class RAnsBitDecoder { - public: - RAnsBitDecoder(); - ~RAnsBitDecoder(); - - // Sets |source_buffer| as the buffer to decode bits from. - // Returns false when the data is invalid. - bool StartDecoding(DecoderBuffer *source_buffer); - - // Decode one bit. Returns true if the bit is a 1, otherwise false. - bool DecodeNextBit(); - - // Decode the next |nbits| and return the sequence in |value|. |nbits| must be - // > 0 and <= 32. - void DecodeLeastSignificantBits32(int nbits, uint32_t *value); - - void EndDecoding() {} - - private: - void Clear(); - - AnsDecoder ans_decoder_; - uint8_t prob_zero_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_encoder.cc deleted file mode 100644 index 8d00ea3..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_encoder.cc +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/bit_coders/rans_bit_encoder.h" - -#include "draco/compression/entropy/ans.h" -#include "draco/core/bit_utils.h" -#include "draco/core/varint_encoding.h" - -namespace draco { - -RAnsBitEncoder::RAnsBitEncoder() : local_bits_(0), num_local_bits_(0) {} - -RAnsBitEncoder::~RAnsBitEncoder() { Clear(); } - -void RAnsBitEncoder::StartEncoding() { Clear(); } - -void RAnsBitEncoder::EncodeBit(bool bit) { - if (bit) { - bit_counts_[1]++; - local_bits_ |= 1 << num_local_bits_; - } else { - bit_counts_[0]++; - } - num_local_bits_++; - - if (num_local_bits_ == 32) { - bits_.push_back(local_bits_); - num_local_bits_ = 0; - local_bits_ = 0; - } -} - -void RAnsBitEncoder::EncodeLeastSignificantBits32(int nbits, uint32_t value) { - DRACO_DCHECK_EQ(true, nbits <= 32); - DRACO_DCHECK_EQ(true, nbits > 0); - - const uint32_t reversed = ReverseBits32(value) >> (32 - nbits); - const int ones = CountOneBits32(reversed); - bit_counts_[0] += (nbits - ones); - bit_counts_[1] += ones; - - const int remaining = 32 - num_local_bits_; - - if (nbits <= remaining) { - CopyBits32(&local_bits_, num_local_bits_, reversed, 0, nbits); - num_local_bits_ += nbits; - if (num_local_bits_ == 32) { - bits_.push_back(local_bits_); - local_bits_ = 0; - num_local_bits_ = 0; - } - } else { - CopyBits32(&local_bits_, num_local_bits_, reversed, 0, remaining); - bits_.push_back(local_bits_); - local_bits_ = 0; - CopyBits32(&local_bits_, 0, reversed, remaining, nbits - remaining); - num_local_bits_ = nbits - remaining; - } -} - -void RAnsBitEncoder::EndEncoding(EncoderBuffer *target_buffer) { - uint64_t total = bit_counts_[1] + bit_counts_[0]; - if (total == 0) { - total++; - } - - // The probability interval [0,1] is mapped to values of [0, 256]. However, - // the coding scheme can not deal with probabilities of 0 or 1, which is why - // we must clamp the values to interval [1, 255]. Specifically 128 - // corresponds to 0.5 exactly. And the value can be given as uint8_t. - const uint32_t zero_prob_raw = static_cast( - ((bit_counts_[0] / static_cast(total)) * 256.0) + 0.5); - - uint8_t zero_prob = 255; - if (zero_prob_raw < 255) { - zero_prob = static_cast(zero_prob_raw); - } - - zero_prob += (zero_prob == 0); - - // Space for 32 bit integer and some extra space. - std::vector buffer((bits_.size() + 8) * 8); - AnsCoder ans_coder; - ans_write_init(&ans_coder, buffer.data()); - - for (int i = num_local_bits_ - 1; i >= 0; --i) { - const uint8_t bit = (local_bits_ >> i) & 1; - rabs_write(&ans_coder, bit, zero_prob); - } - for (auto it = bits_.rbegin(); it != bits_.rend(); ++it) { - const uint32_t bits = *it; - for (int i = 31; i >= 0; --i) { - const uint8_t bit = (bits >> i) & 1; - rabs_write(&ans_coder, bit, zero_prob); - } - } - - const int size_in_bytes = ans_write_end(&ans_coder); - target_buffer->Encode(zero_prob); - EncodeVarint(static_cast(size_in_bytes), target_buffer); - target_buffer->Encode(buffer.data(), size_in_bytes); - - Clear(); -} - -void RAnsBitEncoder::Clear() { - bit_counts_.assign(2, 0); - bits_.clear(); - local_bits_ = 0; - num_local_bits_ = 0; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_encoder.h deleted file mode 100644 index 1993dd3..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_bit_encoder.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides basic classes and functions for rANS coding. -#ifndef DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_ENCODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_ENCODER_H_ - -#include - -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// Class for encoding a sequence of bits using rANS. The probability table used -// to encode the bits is based off the total counts of bits. -// TODO(fgalligan): Investigate using an adaptive table for more compression. -class RAnsBitEncoder { - public: - RAnsBitEncoder(); - ~RAnsBitEncoder(); - - // Must be called before any Encode* function is called. - void StartEncoding(); - - // Encode one bit. If |bit| is true encode a 1, otherwise encode a 0. - void EncodeBit(bool bit); - - // Encode |nbits| of |value|, starting from the least significant bit. - // |nbits| must be > 0 and <= 32. - void EncodeLeastSignificantBits32(int nbits, uint32_t value); - - // Ends the bit encoding and stores the result into the target_buffer. - void EndEncoding(EncoderBuffer *target_buffer); - - private: - void Clear(); - - std::vector bit_counts_; - std::vector bits_; - uint32_t local_bits_; - uint32_t num_local_bits_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_coding_test.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_coding_test.cc deleted file mode 100644 index 9509ad9..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/rans_coding_test.cc +++ /dev/null @@ -1,9 +0,0 @@ -#include "draco/compression/bit_coders/adaptive_rans_bit_decoder.h" -#include "draco/compression/bit_coders/adaptive_rans_bit_encoder.h" -#include "draco/compression/bit_coders/rans_bit_decoder.h" -#include "draco/compression/bit_coders/rans_bit_encoder.h" -#include "draco/core/draco_test_base.h" - -// Just including rans_coding.h and adaptive_rans_coding.h gets an asan error -// when compiling (blaze test :rans_coding_test --config=asan) -TEST(RansCodingTest, LinkerTest) {} diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_decoder.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_decoder.cc deleted file mode 100644 index 8ed50ef..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_decoder.cc +++ /dev/null @@ -1,49 +0,0 @@ -#include "draco/compression/bit_coders/symbol_bit_decoder.h" - -#include "draco/compression/entropy/symbol_decoding.h" - -namespace draco { - -bool SymbolBitDecoder::StartDecoding(DecoderBuffer *source_buffer) { - uint32_t size; - if (!source_buffer->Decode(&size)) { - return false; - } - - symbols_.resize(size); - if (!DecodeSymbols(size, 1, source_buffer, symbols_.data())) { - return false; - } - std::reverse(symbols_.begin(), symbols_.end()); - return true; -} - -bool SymbolBitDecoder::DecodeNextBit() { - uint32_t symbol; - DecodeLeastSignificantBits32(1, &symbol); - DRACO_DCHECK(symbol == 0 || symbol == 1); - return symbol == 1; -} - -void SymbolBitDecoder::DecodeLeastSignificantBits32(int nbits, - uint32_t *value) { - DRACO_DCHECK_LE(1, nbits); - DRACO_DCHECK_LE(nbits, 32); - DRACO_DCHECK_NE(value, nullptr); - // Testing: check to make sure there is something to decode. - DRACO_DCHECK_GT(symbols_.size(), 0); - - (*value) = symbols_.back(); - symbols_.pop_back(); - - const int discarded_bits = 32 - nbits; - (*value) <<= discarded_bits; - (*value) >>= discarded_bits; -} - -void SymbolBitDecoder::Clear() { - symbols_.clear(); - symbols_.shrink_to_fit(); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_decoder.h deleted file mode 100644 index 909d717..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_decoder.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_DECODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_DECODER_H_ - -#include -#include - -#include "draco/core/decoder_buffer.h" - -namespace draco { - -// Class for decoding bits using the symbol entropy encoding. Wraps -// |DecodeSymbols|. Note that this uses a symbol-based encoding scheme for -// encoding bits. -class SymbolBitDecoder { - public: - // Sets |source_buffer| as the buffer to decode bits from. - bool StartDecoding(DecoderBuffer *source_buffer); - - // Decode one bit. Returns true if the bit is a 1, otherwise false. - bool DecodeNextBit(); - - // Decode the next |nbits| and return the sequence in |value|. |nbits| must be - // > 0 and <= 32. - void DecodeLeastSignificantBits32(int nbits, uint32_t *value); - - void EndDecoding() { Clear(); } - - private: - void Clear(); - - std::vector symbols_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_encoder.cc b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_encoder.cc deleted file mode 100644 index 8383423..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_encoder.cc +++ /dev/null @@ -1,30 +0,0 @@ -#include "draco/compression/bit_coders/symbol_bit_encoder.h" - -#include "draco/compression/entropy/symbol_encoding.h" - -namespace draco { - -void SymbolBitEncoder::EncodeLeastSignificantBits32(int nbits, uint32_t value) { - DRACO_DCHECK_LE(1, nbits); - DRACO_DCHECK_LE(nbits, 32); - - const int discarded_bits = 32 - nbits; - value <<= discarded_bits; - value >>= discarded_bits; - - symbols_.push_back(value); -} - -void SymbolBitEncoder::EndEncoding(EncoderBuffer *target_buffer) { - target_buffer->Encode(static_cast(symbols_.size())); - EncodeSymbols(symbols_.data(), static_cast(symbols_.size()), 1, nullptr, - target_buffer); - Clear(); -} - -void SymbolBitEncoder::Clear() { - symbols_.clear(); - symbols_.shrink_to_fit(); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_encoder.h deleted file mode 100644 index 7f1570c..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/bit_coders/symbol_bit_encoder.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_ENCODER_H_ -#define DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_ENCODER_H_ - -#include -#include - -#include "draco/core/encoder_buffer.h" - -namespace draco { - -// Class for encoding bits using the symbol entropy encoding. Wraps -// |EncodeSymbols|. Note that this uses a symbol-based encoding scheme for -// encoding bits. -class SymbolBitEncoder { - public: - // Must be called before any Encode* function is called. - void StartEncoding() { Clear(); } - - // Encode one bit. If |bit| is true encode a 1, otherwise encode a 0. - void EncodeBit(bool bit) { EncodeLeastSignificantBits32(1, bit ? 1 : 0); } - - // Encode |nbits| LSBs of |value| as a symbol. |nbits| must be > 0 and <= 32. - void EncodeLeastSignificantBits32(int nbits, uint32_t value); - - // Ends the bit encoding and stores the result into the target_buffer. - void EndEncoding(EncoderBuffer *target_buffer); - - private: - void Clear(); - - std::vector symbols_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/config/compression_shared.h b/libs/assimp/contrib/draco/src/draco/compression/config/compression_shared.h deleted file mode 100644 index c43f303..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/config/compression_shared.h +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_CONFIG_COMPRESSION_SHARED_H_ -#define DRACO_COMPRESSION_CONFIG_COMPRESSION_SHARED_H_ - -#include - -#include "draco/core/macros.h" -#include "draco/draco_features.h" - -namespace draco { - -// Latest Draco bit-stream version. -static constexpr uint8_t kDracoPointCloudBitstreamVersionMajor = 2; -static constexpr uint8_t kDracoPointCloudBitstreamVersionMinor = 3; -static constexpr uint8_t kDracoMeshBitstreamVersionMajor = 2; -static constexpr uint8_t kDracoMeshBitstreamVersionMinor = 2; - -// Concatenated latest bit-stream version. -static constexpr uint16_t kDracoPointCloudBitstreamVersion = - DRACO_BITSTREAM_VERSION(kDracoPointCloudBitstreamVersionMajor, - kDracoPointCloudBitstreamVersionMinor); - -static constexpr uint16_t kDracoMeshBitstreamVersion = DRACO_BITSTREAM_VERSION( - kDracoMeshBitstreamVersionMajor, kDracoMeshBitstreamVersionMinor); - -// Currently, we support point cloud and triangular mesh encoding. -// TODO(draco-eng) Convert enum to enum class (safety, not performance). -enum EncodedGeometryType { - INVALID_GEOMETRY_TYPE = -1, - POINT_CLOUD = 0, - TRIANGULAR_MESH, - NUM_ENCODED_GEOMETRY_TYPES -}; - -// List of encoding methods for point clouds. -enum PointCloudEncodingMethod { - POINT_CLOUD_SEQUENTIAL_ENCODING = 0, - POINT_CLOUD_KD_TREE_ENCODING -}; - -// List of encoding methods for meshes. -enum MeshEncoderMethod { - MESH_SEQUENTIAL_ENCODING = 0, - MESH_EDGEBREAKER_ENCODING, -}; - -// List of various attribute encoders supported by our framework. The entries -// are used as unique identifiers of the encoders and their values should not -// be changed! -enum AttributeEncoderType { - BASIC_ATTRIBUTE_ENCODER = 0, - MESH_TRAVERSAL_ATTRIBUTE_ENCODER, - KD_TREE_ATTRIBUTE_ENCODER, -}; - -// List of various sequential attribute encoder/decoders that can be used in our -// pipeline. The values represent unique identifiers used by the decoder and -// they should not be changed. -enum SequentialAttributeEncoderType { - SEQUENTIAL_ATTRIBUTE_ENCODER_GENERIC = 0, - SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER, - SEQUENTIAL_ATTRIBUTE_ENCODER_QUANTIZATION, - SEQUENTIAL_ATTRIBUTE_ENCODER_NORMALS, -}; - -// List of all prediction methods currently supported by our framework. -enum PredictionSchemeMethod { - // Special value indicating that no prediction scheme was used. - PREDICTION_NONE = -2, - // Used when no specific prediction scheme is required. - PREDICTION_UNDEFINED = -1, - PREDICTION_DIFFERENCE = 0, - MESH_PREDICTION_PARALLELOGRAM = 1, - MESH_PREDICTION_MULTI_PARALLELOGRAM = 2, - MESH_PREDICTION_TEX_COORDS_DEPRECATED = 3, - MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM = 4, - MESH_PREDICTION_TEX_COORDS_PORTABLE = 5, - MESH_PREDICTION_GEOMETRIC_NORMAL = 6, - NUM_PREDICTION_SCHEMES -}; - -// List of all prediction scheme transforms used by our framework. -enum PredictionSchemeTransformType { - PREDICTION_TRANSFORM_NONE = -1, - // Basic delta transform where the prediction is computed as difference the - // predicted and original value. - PREDICTION_TRANSFORM_DELTA = 0, - // An improved delta transform where all computed delta values are wrapped - // around a fixed interval which lowers the entropy. - PREDICTION_TRANSFORM_WRAP = 1, - // Specialized transform for normal coordinates using inverted tiles. - PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON = 2, - // Specialized transform for normal coordinates using canonicalized inverted - // tiles. - PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON_CANONICALIZED = 3, - // The number of valid (non-negative) prediction scheme transform types. - NUM_PREDICTION_SCHEME_TRANSFORM_TYPES -}; - -// List of all mesh traversal methods supported by Draco framework. -enum MeshTraversalMethod { - MESH_TRAVERSAL_DEPTH_FIRST = 0, - MESH_TRAVERSAL_PREDICTION_DEGREE = 1, - NUM_TRAVERSAL_METHODS -}; - -// List of all variant of the edgebreaker method that is used for compression -// of mesh connectivity. -enum MeshEdgebreakerConnectivityEncodingMethod { - MESH_EDGEBREAKER_STANDARD_ENCODING = 0, - MESH_EDGEBREAKER_PREDICTIVE_ENCODING = 1, // Deprecated. - MESH_EDGEBREAKER_VALENCE_ENCODING = 2, -}; - -// Draco header V1 -struct DracoHeader { - int8_t draco_string[5]; - uint8_t version_major; - uint8_t version_minor; - uint8_t encoder_type; - uint8_t encoder_method; - uint16_t flags; -}; - -enum NormalPredictionMode { - ONE_TRIANGLE = 0, // To be deprecated. - TRIANGLE_AREA = 1, -}; - -// Different methods used for symbol entropy encoding. -enum SymbolCodingMethod { - SYMBOL_CODING_TAGGED = 0, - SYMBOL_CODING_RAW = 1, - NUM_SYMBOL_CODING_METHODS, -}; - -// Mask for setting and getting the bit for metadata in |flags| of header. -#define METADATA_FLAG_MASK 0x8000 - -} // namespace draco - -#endif // DRACO_COMPRESSION_CONFIG_COMPRESSION_SHARED_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/config/decoder_options.h b/libs/assimp/contrib/draco/src/draco/compression/config/decoder_options.h deleted file mode 100644 index 3b38899..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/config/decoder_options.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_CONFIG_DECODER_OPTIONS_H_ -#define DRACO_COMPRESSION_CONFIG_DECODER_OPTIONS_H_ - -#include -#include - -#include "draco/attributes/geometry_attribute.h" -#include "draco/compression/config/draco_options.h" - -namespace draco { - -// Class containing options that can be passed to PointCloudDecoder to control -// decoding of the input geometry. The options can be specified either for the -// whole geometry or for a specific attribute type. Each option is identified -// by a unique name stored as an std::string. -typedef DracoOptions DecoderOptions; - -} // namespace draco - -#endif // DRACO_COMPRESSION_CONFIG_DECODER_OPTIONS_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/config/decoder_options_test.cc b/libs/assimp/contrib/draco/src/draco/compression/config/decoder_options_test.cc deleted file mode 100644 index a5cd7f1..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/config/decoder_options_test.cc +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/config/decoder_options.h" - -#include "draco/core/draco_test_base.h" - -namespace { - -class DecoderOptionsTest : public ::testing::Test { - protected: - DecoderOptionsTest() {} -}; - -TEST_F(DecoderOptionsTest, TestOptions) { - // This test verifies that we can update global and attribute options of the - // DecoderOptions class instance. - draco::DecoderOptions options; - options.SetGlobalInt("test", 3); - ASSERT_EQ(options.GetGlobalInt("test", -1), 3); - - options.SetAttributeInt(draco::GeometryAttribute::POSITION, "test", 1); - options.SetAttributeInt(draco::GeometryAttribute::GENERIC, "test", 2); - ASSERT_EQ( - options.GetAttributeInt(draco::GeometryAttribute::TEX_COORD, "test", -1), - 3); - ASSERT_EQ( - options.GetAttributeInt(draco::GeometryAttribute::POSITION, "test", -1), - 1); - ASSERT_EQ( - options.GetAttributeInt(draco::GeometryAttribute::GENERIC, "test", -1), - 2); -} - -TEST_F(DecoderOptionsTest, TestAttributeOptionsAccessors) { - // This test verifies that we can query options stored in DecoderOptions - // class instance. - draco::DecoderOptions options; - options.SetGlobalInt("test", 1); - options.SetAttributeInt(draco::GeometryAttribute::POSITION, "test", 2); - options.SetAttributeInt(draco::GeometryAttribute::TEX_COORD, "test", 3); - - ASSERT_EQ( - options.GetAttributeInt(draco::GeometryAttribute::POSITION, "test", -1), - 2); - ASSERT_EQ( - options.GetAttributeInt(draco::GeometryAttribute::POSITION, "test2", -1), - -1); - ASSERT_EQ( - options.GetAttributeInt(draco::GeometryAttribute::TEX_COORD, "test", -1), - 3); - ASSERT_EQ( - options.GetAttributeInt(draco::GeometryAttribute::NORMAL, "test", -1), 1); -} - -} // namespace diff --git a/libs/assimp/contrib/draco/src/draco/compression/config/draco_options.h b/libs/assimp/contrib/draco/src/draco/compression/config/draco_options.h deleted file mode 100644 index 2bd4a3b..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/config/draco_options.h +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_CONFIG_DRACO_OPTIONS_H_ -#define DRACO_COMPRESSION_CONFIG_DRACO_OPTIONS_H_ - -#include -#include - -#include "draco/core/options.h" - -namespace draco { - -// Base option class used to control encoding and decoding. The geometry coding -// can be controlled through the following options: -// 1. Global options - Options specific to overall geometry or options common -// for all attributes -// 2. Per attribute options - Options specific to a given attribute. -// Each attribute is identified by the template -// argument AttributeKeyT that can be for example -// the attribute type or the attribute id. -// -// Example: -// -// DracoOptions options; -// -// // Set an option common for all attributes. -// options.SetGlobalInt("some_option_name", 2); -// -// // Geometry with two attributes. -// AttributeKey att_key0 = in_key0; -// AttributeKey att_key1 = in_key1; -// -// options.SetAttributeInt(att_key0, "some_option_name", 3); -// -// options.GetAttributeInt(att_key0, "some_option_name"); // Returns 3 -// options.GetAttributeInt(att_key1, "some_option_name"); // Returns 2 -// options.GetGlobalInt("some_option_name"); // Returns 2 -// -template -class DracoOptions { - public: - typedef AttributeKeyT AttributeKey; - - // Get an option for a specific attribute key. If the option is not found in - // an attribute specific storage, the implementation will return a global - // option of the given name (if available). If the option is not found, the - // provided default value |default_val| is returned instead. - int GetAttributeInt(const AttributeKey &att_key, const std::string &name, - int default_val) const; - - // Sets an option for a specific attribute key. - void SetAttributeInt(const AttributeKey &att_key, const std::string &name, - int val); - - float GetAttributeFloat(const AttributeKey &att_key, const std::string &name, - float default_val) const; - void SetAttributeFloat(const AttributeKey &att_key, const std::string &name, - float val); - bool GetAttributeBool(const AttributeKey &att_key, const std::string &name, - bool default_val) const; - void SetAttributeBool(const AttributeKey &att_key, const std::string &name, - bool val); - template - bool GetAttributeVector(const AttributeKey &att_key, const std::string &name, - int num_dims, DataTypeT *val) const; - template - void SetAttributeVector(const AttributeKey &att_key, const std::string &name, - int num_dims, const DataTypeT *val); - - bool IsAttributeOptionSet(const AttributeKey &att_key, - const std::string &name) const; - - // Gets/sets a global option that is not specific to any attribute. - int GetGlobalInt(const std::string &name, int default_val) const { - return global_options_.GetInt(name, default_val); - } - void SetGlobalInt(const std::string &name, int val) { - global_options_.SetInt(name, val); - } - float GetGlobalFloat(const std::string &name, float default_val) const { - return global_options_.GetFloat(name, default_val); - } - void SetGlobalFloat(const std::string &name, float val) { - global_options_.SetFloat(name, val); - } - bool GetGlobalBool(const std::string &name, bool default_val) const { - return global_options_.GetBool(name, default_val); - } - void SetGlobalBool(const std::string &name, bool val) { - global_options_.SetBool(name, val); - } - template - bool GetGlobalVector(const std::string &name, int num_dims, - DataTypeT *val) const { - return global_options_.GetVector(name, num_dims, val); - } - template - void SetGlobalVector(const std::string &name, int num_dims, - const DataTypeT *val) { - global_options_.SetVector(name, val, num_dims); - } - bool IsGlobalOptionSet(const std::string &name) const { - return global_options_.IsOptionSet(name); - } - - // Sets or replaces attribute options with the provided |options|. - void SetAttributeOptions(const AttributeKey &att_key, const Options &options); - void SetGlobalOptions(const Options &options) { global_options_ = options; } - - // Returns |Options| instance for the specified options class if it exists. - const Options *FindAttributeOptions(const AttributeKeyT &att_key) const; - const Options &GetGlobalOptions() const { return global_options_; } - - private: - Options *GetAttributeOptions(const AttributeKeyT &att_key); - - Options global_options_; - - // Storage for options related to geometry attributes. - std::map attribute_options_; -}; - -template -const Options *DracoOptions::FindAttributeOptions( - const AttributeKeyT &att_key) const { - auto it = attribute_options_.find(att_key); - if (it == attribute_options_.end()) { - return nullptr; - } - return &it->second; -} - -template -Options *DracoOptions::GetAttributeOptions( - const AttributeKeyT &att_key) { - auto it = attribute_options_.find(att_key); - if (it != attribute_options_.end()) { - return &it->second; - } - Options new_options; - it = attribute_options_.insert(std::make_pair(att_key, new_options)).first; - return &it->second; -} - -template -int DracoOptions::GetAttributeInt(const AttributeKeyT &att_key, - const std::string &name, - int default_val) const { - const Options *const att_options = FindAttributeOptions(att_key); - if (att_options && att_options->IsOptionSet(name)) { - return att_options->GetInt(name, default_val); - } - return global_options_.GetInt(name, default_val); -} - -template -void DracoOptions::SetAttributeInt(const AttributeKeyT &att_key, - const std::string &name, - int val) { - GetAttributeOptions(att_key)->SetInt(name, val); -} - -template -float DracoOptions::GetAttributeFloat( - const AttributeKeyT &att_key, const std::string &name, - float default_val) const { - const Options *const att_options = FindAttributeOptions(att_key); - if (att_options && att_options->IsOptionSet(name)) { - return att_options->GetFloat(name, default_val); - } - return global_options_.GetFloat(name, default_val); -} - -template -void DracoOptions::SetAttributeFloat( - const AttributeKeyT &att_key, const std::string &name, float val) { - GetAttributeOptions(att_key)->SetFloat(name, val); -} - -template -bool DracoOptions::GetAttributeBool(const AttributeKeyT &att_key, - const std::string &name, - bool default_val) const { - const Options *const att_options = FindAttributeOptions(att_key); - if (att_options && att_options->IsOptionSet(name)) { - return att_options->GetBool(name, default_val); - } - return global_options_.GetBool(name, default_val); -} - -template -void DracoOptions::SetAttributeBool(const AttributeKeyT &att_key, - const std::string &name, - bool val) { - GetAttributeOptions(att_key)->SetBool(name, val); -} - -template -template -bool DracoOptions::GetAttributeVector( - const AttributeKey &att_key, const std::string &name, int num_dims, - DataTypeT *val) const { - const Options *const att_options = FindAttributeOptions(att_key); - if (att_options && att_options->IsOptionSet(name)) { - return att_options->GetVector(name, num_dims, val); - } - return global_options_.GetVector(name, num_dims, val); -} - -template -template -void DracoOptions::SetAttributeVector( - const AttributeKey &att_key, const std::string &name, int num_dims, - const DataTypeT *val) { - GetAttributeOptions(att_key)->SetVector(name, val, num_dims); -} - -template -bool DracoOptions::IsAttributeOptionSet( - const AttributeKey &att_key, const std::string &name) const { - const Options *const att_options = FindAttributeOptions(att_key); - if (att_options) { - return att_options->IsOptionSet(name); - } - return global_options_.IsOptionSet(name); -} - -template -void DracoOptions::SetAttributeOptions( - const AttributeKey &att_key, const Options &options) { - Options *att_options = GetAttributeOptions(att_key); - *att_options = options; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_CONFIG_DRACO_OPTIONS_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/config/encoder_options.h b/libs/assimp/contrib/draco/src/draco/compression/config/encoder_options.h deleted file mode 100644 index ed1b020..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/config/encoder_options.h +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_CONFIG_ENCODER_OPTIONS_H_ -#define DRACO_COMPRESSION_CONFIG_ENCODER_OPTIONS_H_ - -#include "draco/attributes/geometry_attribute.h" -#include "draco/compression/config/draco_options.h" -#include "draco/compression/config/encoding_features.h" -#include "draco/draco_features.h" - -namespace draco { - -// EncoderOptions allow users to specify so called feature options that are used -// to inform the encoder which encoding features can be used (i.e. which -// features are going to be available to the decoder). -template -class EncoderOptionsBase : public DracoOptions { - public: - static EncoderOptionsBase CreateDefaultOptions() { - EncoderOptionsBase options; -#ifdef DRACO_STANDARD_EDGEBREAKER_SUPPORTED - options.SetSupportedFeature(features::kEdgebreaker, true); -#endif -#ifdef DRACO_PREDICTIVE_EDGEBREAKER_SUPPORTED - options.SetSupportedFeature(features::kPredictiveEdgebreaker, true); -#endif - return options; - } - static EncoderOptionsBase CreateEmptyOptions() { - return EncoderOptionsBase(); - } - - // Returns speed options with default value of 5. - int GetEncodingSpeed() const { - return this->GetGlobalInt("encoding_speed", 5); - } - int GetDecodingSpeed() const { - return this->GetGlobalInt("decoding_speed", 5); - } - - // Returns the maximum speed for both encoding/decoding. - int GetSpeed() const { - const int encoding_speed = this->GetGlobalInt("encoding_speed", -1); - const int decoding_speed = this->GetGlobalInt("decoding_speed", -1); - const int max_speed = std::max(encoding_speed, decoding_speed); - if (max_speed == -1) { - return 5; // Default value. - } - return max_speed; - } - - void SetSpeed(int encoding_speed, int decoding_speed) { - this->SetGlobalInt("encoding_speed", encoding_speed); - this->SetGlobalInt("decoding_speed", decoding_speed); - } - - // Sets a given feature as supported or unsupported by the target decoder. - // Encoder will always use only supported features when encoding the input - // geometry. - void SetSupportedFeature(const std::string &name, bool supported) { - feature_options_.SetBool(name, supported); - } - bool IsFeatureSupported(const std::string &name) const { - return feature_options_.GetBool(name); - } - - void SetFeatureOptions(const Options &options) { feature_options_ = options; } - const Options &GetFeaturelOptions() const { return feature_options_; } - - private: - // Use helper methods to construct the encoder options. - // See CreateDefaultOptions(); - EncoderOptionsBase() {} - - // List of supported/unsupported features that can be used by the encoder. - Options feature_options_; -}; - -// Encoder options where attributes are identified by their attribute id. -// Used to set options that are specific to a given geometry. -typedef EncoderOptionsBase EncoderOptions; - -} // namespace draco - -#endif // DRACO_COMPRESSION_CONFIG_ENCODER_OPTIONS_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/config/encoding_features.h b/libs/assimp/contrib/draco/src/draco/compression/config/encoding_features.h deleted file mode 100644 index d6a8b71..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/config/encoding_features.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File provides helpful macros that define features available for encoding -// the input of the input geometry. These macros can be used as an input in -// the EncoderOptions::SetSupportedFeature() method instead of the text. -// The most recent set of features supported -// by the default implementation is: -// -// kEdgebreaker -// - edgebreaker method for encoding meshes. -// kPredictiveEdgebreaker -// - advanced version of the edgebreaker method (slower but better -// compression). -// -#ifndef DRACO_COMPRESSION_CONFIG_ENCODING_FEATURES_H_ -#define DRACO_COMPRESSION_CONFIG_ENCODING_FEATURES_H_ - -namespace draco { -namespace features { - -constexpr const char *kEdgebreaker = "standard_edgebreaker"; -constexpr const char *kPredictiveEdgebreaker = "predictive_edgebreaker"; - -} // namespace features -} // namespace draco - -#endif // DRACO_COMPRESSION_CONFIG_ENCODING_FEATURES_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/decode.cc b/libs/assimp/contrib/draco/src/draco/compression/decode.cc deleted file mode 100644 index 92ae4ff..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/decode.cc +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/decode.h" - -#include "draco/compression/config/compression_shared.h" - -#ifdef DRACO_MESH_COMPRESSION_SUPPORTED -#include "draco/compression/mesh/mesh_edgebreaker_decoder.h" -#include "draco/compression/mesh/mesh_sequential_decoder.h" -#endif - -#ifdef DRACO_POINT_CLOUD_COMPRESSION_SUPPORTED -#include "draco/compression/point_cloud/point_cloud_kd_tree_decoder.h" -#include "draco/compression/point_cloud/point_cloud_sequential_decoder.h" -#endif - -namespace draco { - -#ifdef DRACO_POINT_CLOUD_COMPRESSION_SUPPORTED -StatusOr> CreatePointCloudDecoder( - int8_t method) { - if (method == POINT_CLOUD_SEQUENTIAL_ENCODING) { - return std::unique_ptr( - new PointCloudSequentialDecoder()); - } else if (method == POINT_CLOUD_KD_TREE_ENCODING) { - return std::unique_ptr(new PointCloudKdTreeDecoder()); - } - return Status(Status::DRACO_ERROR, "Unsupported encoding method."); -} -#endif - -#ifdef DRACO_MESH_COMPRESSION_SUPPORTED -StatusOr> CreateMeshDecoder(uint8_t method) { - if (method == MESH_SEQUENTIAL_ENCODING) { - return std::unique_ptr(new MeshSequentialDecoder()); - } else if (method == MESH_EDGEBREAKER_ENCODING) { - return std::unique_ptr(new MeshEdgebreakerDecoder()); - } - return Status(Status::DRACO_ERROR, "Unsupported encoding method."); -} -#endif - -StatusOr Decoder::GetEncodedGeometryType( - DecoderBuffer *in_buffer) { - DecoderBuffer temp_buffer(*in_buffer); - DracoHeader header; - DRACO_RETURN_IF_ERROR(PointCloudDecoder::DecodeHeader(&temp_buffer, &header)); - if (header.encoder_type >= NUM_ENCODED_GEOMETRY_TYPES) { - return Status(Status::DRACO_ERROR, "Unsupported geometry type."); - } - return static_cast(header.encoder_type); -} - -StatusOr> Decoder::DecodePointCloudFromBuffer( - DecoderBuffer *in_buffer) { - DRACO_ASSIGN_OR_RETURN(EncodedGeometryType type, - GetEncodedGeometryType(in_buffer)) - if (type == POINT_CLOUD) { -#ifdef DRACO_POINT_CLOUD_COMPRESSION_SUPPORTED - std::unique_ptr point_cloud(new PointCloud()); - DRACO_RETURN_IF_ERROR(DecodeBufferToGeometry(in_buffer, point_cloud.get())) - return std::move(point_cloud); -#endif - } else if (type == TRIANGULAR_MESH) { -#ifdef DRACO_MESH_COMPRESSION_SUPPORTED - std::unique_ptr mesh(new Mesh()); - DRACO_RETURN_IF_ERROR(DecodeBufferToGeometry(in_buffer, mesh.get())) - return static_cast>(std::move(mesh)); -#endif - } - return Status(Status::DRACO_ERROR, "Unsupported geometry type."); -} - -StatusOr> Decoder::DecodeMeshFromBuffer( - DecoderBuffer *in_buffer) { - std::unique_ptr mesh(new Mesh()); - DRACO_RETURN_IF_ERROR(DecodeBufferToGeometry(in_buffer, mesh.get())) - return std::move(mesh); -} - -Status Decoder::DecodeBufferToGeometry(DecoderBuffer *in_buffer, - PointCloud *out_geometry) { -#ifdef DRACO_POINT_CLOUD_COMPRESSION_SUPPORTED - DecoderBuffer temp_buffer(*in_buffer); - DracoHeader header; - DRACO_RETURN_IF_ERROR(PointCloudDecoder::DecodeHeader(&temp_buffer, &header)) - if (header.encoder_type != POINT_CLOUD) { - return Status(Status::DRACO_ERROR, "Input is not a point cloud."); - } - DRACO_ASSIGN_OR_RETURN(std::unique_ptr decoder, - CreatePointCloudDecoder(header.encoder_method)) - - DRACO_RETURN_IF_ERROR(decoder->Decode(options_, in_buffer, out_geometry)) - return OkStatus(); -#else - return Status(Status::DRACO_ERROR, "Unsupported geometry type."); -#endif -} - -Status Decoder::DecodeBufferToGeometry(DecoderBuffer *in_buffer, - Mesh *out_geometry) { -#ifdef DRACO_MESH_COMPRESSION_SUPPORTED - DecoderBuffer temp_buffer(*in_buffer); - DracoHeader header; - DRACO_RETURN_IF_ERROR(PointCloudDecoder::DecodeHeader(&temp_buffer, &header)) - if (header.encoder_type != TRIANGULAR_MESH) { - return Status(Status::DRACO_ERROR, "Input is not a mesh."); - } - DRACO_ASSIGN_OR_RETURN(std::unique_ptr decoder, - CreateMeshDecoder(header.encoder_method)) - - DRACO_RETURN_IF_ERROR(decoder->Decode(options_, in_buffer, out_geometry)) - return OkStatus(); -#else - return Status(Status::DRACO_ERROR, "Unsupported geometry type."); -#endif -} - -void Decoder::SetSkipAttributeTransform(GeometryAttribute::Type att_type) { - options_.SetAttributeBool(att_type, "skip_attribute_transform", true); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/decode.h b/libs/assimp/contrib/draco/src/draco/compression/decode.h deleted file mode 100644 index 5f3fad2..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/decode.h +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_DECODE_H_ -#define DRACO_COMPRESSION_DECODE_H_ - -#include "draco/compression/config/compression_shared.h" -#include "draco/compression/config/decoder_options.h" -#include "draco/core/decoder_buffer.h" -#include "draco/core/status_or.h" -#include "draco/draco_features.h" -#include "draco/mesh/mesh.h" - -namespace draco { - -// Class responsible for decoding of meshes and point clouds that were -// compressed by a Draco encoder. -class Decoder { - public: - // Returns the geometry type encoded in the input |in_buffer|. - // The return value is one of POINT_CLOUD, MESH or INVALID_GEOMETRY in case - // the input data is invalid. - // The decoded geometry type can be used to choose an appropriate decoding - // function for a given geometry type (see below). - static StatusOr GetEncodedGeometryType( - DecoderBuffer *in_buffer); - - // Decodes point cloud from the provided buffer. The buffer must be filled - // with data that was encoded with either the EncodePointCloudToBuffer or - // EncodeMeshToBuffer methods in encode.h. In case the input buffer contains - // mesh, the returned instance can be down-casted to Mesh. - StatusOr> DecodePointCloudFromBuffer( - DecoderBuffer *in_buffer); - - // Decodes a triangular mesh from the provided buffer. The mesh must be filled - // with data that was encoded using the EncodeMeshToBuffer method in encode.h. - // The function will return nullptr in case the input is invalid or if it was - // encoded with the EncodePointCloudToBuffer method. - StatusOr> DecodeMeshFromBuffer( - DecoderBuffer *in_buffer); - - // Decodes the buffer into a provided geometry. If the geometry is - // incompatible with the encoded data. For example, when |out_geometry| is - // draco::Mesh while the data contains a point cloud, the function will return - // an error status. - Status DecodeBufferToGeometry(DecoderBuffer *in_buffer, - PointCloud *out_geometry); - Status DecodeBufferToGeometry(DecoderBuffer *in_buffer, Mesh *out_geometry); - - // When set, the decoder is going to skip attribute transform for a given - // attribute type. For example for quantized attributes, the decoder would - // skip the dequantization step and the returned geometry would contain an - // attribute with quantized values. The attribute would also contain an - // instance of AttributeTransform class that is used to describe the skipped - // transform, including all parameters that are needed to perform the - // transform manually. - void SetSkipAttributeTransform(GeometryAttribute::Type att_type); - - // Returns the options instance used by the decoder that can be used by users - // to control the decoding process. - DecoderOptions *options() { return &options_; } - - private: - DecoderOptions options_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_DECODE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/decode_test.cc b/libs/assimp/contrib/draco/src/draco/compression/decode_test.cc deleted file mode 100644 index 1987146..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/decode_test.cc +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/decode.h" - -#include -#include - -#include "draco/core/draco_test_base.h" -#include "draco/core/draco_test_utils.h" -#include "draco/io/file_utils.h" - -namespace { - -class DecodeTest : public ::testing::Test { - protected: - DecodeTest() {} -}; - -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED -TEST_F(DecodeTest, TestSkipAttributeTransform) { - const std::string file_name = "test_nm_quant.0.9.0.drc"; - // Tests that decoders can successfully skip attribute transform. - std::vector data; - ASSERT_TRUE( - draco::ReadFileToBuffer(draco::GetTestFileFullPath(file_name), &data)); - ASSERT_FALSE(data.empty()); - - // Create a draco decoding buffer. Note that no data is copied in this step. - draco::DecoderBuffer buffer; - buffer.Init(data.data(), data.size()); - - draco::Decoder decoder; - // Make sure we skip dequantization for the position attribute. - decoder.SetSkipAttributeTransform(draco::GeometryAttribute::POSITION); - - // Decode the input data into a geometry. - std::unique_ptr pc = - decoder.DecodePointCloudFromBuffer(&buffer).value(); - ASSERT_NE(pc, nullptr); - - const draco::PointAttribute *const pos_att = - pc->GetNamedAttribute(draco::GeometryAttribute::POSITION); - ASSERT_NE(pos_att, nullptr); - - // Ensure the position attribute is of type int32_t and that it has a valid - // attribute transform. - ASSERT_EQ(pos_att->data_type(), draco::DT_INT32); - ASSERT_NE(pos_att->GetAttributeTransformData(), nullptr); - - // Normal attribute should be left transformed. - const draco::PointAttribute *const norm_att = - pc->GetNamedAttribute(draco::GeometryAttribute::NORMAL); - ASSERT_EQ(norm_att->data_type(), draco::DT_FLOAT32); - ASSERT_EQ(norm_att->GetAttributeTransformData(), nullptr); -} -#endif - -void TestSkipAttributeTransformOnPointCloudWithColor(const std::string &file) { - std::vector data; - ASSERT_TRUE(draco::ReadFileToBuffer(draco::GetTestFileFullPath(file), &data)); - ASSERT_FALSE(data.empty()); - - // Create a draco decoding buffer. Note that no data is copied in this step. - draco::DecoderBuffer buffer; - buffer.Init(data.data(), data.size()); - - draco::Decoder decoder; - // Make sure we skip dequantization for the position attribute. - decoder.SetSkipAttributeTransform(draco::GeometryAttribute::POSITION); - - // Decode the input data into a geometry. - std::unique_ptr pc = - decoder.DecodePointCloudFromBuffer(&buffer).value(); - ASSERT_NE(pc, nullptr); - - const draco::PointAttribute *const pos_att = - pc->GetNamedAttribute(draco::GeometryAttribute::POSITION); - ASSERT_NE(pos_att, nullptr); - - // Ensure the position attribute is of type int32_t or uint32_t and that it - // has a valid attribute transform. - ASSERT_TRUE(pos_att->data_type() == draco::DT_INT32 || - pos_att->data_type() == draco::DT_UINT32); - ASSERT_NE(pos_att->GetAttributeTransformData(), nullptr); - - const draco::PointAttribute *const clr_att = - pc->GetNamedAttribute(draco::GeometryAttribute::COLOR); - ASSERT_EQ(clr_att->data_type(), draco::DT_UINT8); - - // Ensure the color attribute was decoded correctly. Perform the decoding - // again without skipping the position dequantization and compare the - // attribute values. - - draco::DecoderBuffer buffer_2; - buffer_2.Init(data.data(), data.size()); - - draco::Decoder decoder_2; - - // Decode the input data into a geometry. - std::unique_ptr pc_2 = - decoder_2.DecodePointCloudFromBuffer(&buffer_2).value(); - ASSERT_NE(pc_2, nullptr); - - const draco::PointAttribute *const clr_att_2 = - pc_2->GetNamedAttribute(draco::GeometryAttribute::COLOR); - ASSERT_NE(clr_att_2, nullptr); - for (draco::PointIndex pi(0); pi < pc_2->num_points(); ++pi) { - // Colors should be exactly the same for both cases. - ASSERT_EQ(std::memcmp(clr_att->GetAddress(clr_att->mapped_index(pi)), - clr_att_2->GetAddress(clr_att_2->mapped_index(pi)), - clr_att->byte_stride()), - 0); - } -} - -TEST_F(DecodeTest, TestSkipAttributeTransformOnPointCloud) { - // Tests that decoders can successfully skip attribute transform on a point - // cloud with multiple attributes encoded with one attributes encoder. - TestSkipAttributeTransformOnPointCloudWithColor("pc_color.drc"); - TestSkipAttributeTransformOnPointCloudWithColor("pc_kd_color.drc"); -} - -TEST_F(DecodeTest, TestSkipAttributeTransformWithNoQuantization) { - // Tests that decoders can successfully skip attribute transform even though - // the input model was not quantized (it has no attribute transform). - const std::string file_name = "point_cloud_no_qp.drc"; - std::vector data; - ASSERT_TRUE( - draco::ReadFileToBuffer(draco::GetTestFileFullPath(file_name), &data)); - ASSERT_FALSE(data.empty()); - - // Create a draco decoding buffer. Note that no data is copied in this step. - draco::DecoderBuffer buffer; - buffer.Init(data.data(), data.size()); - - draco::Decoder decoder; - // Make sure we skip dequantization for the position attribute. - decoder.SetSkipAttributeTransform(draco::GeometryAttribute::POSITION); - - // Decode the input data into a geometry. - std::unique_ptr pc = - decoder.DecodePointCloudFromBuffer(&buffer).value(); - ASSERT_NE(pc, nullptr); - - const draco::PointAttribute *const pos_att = - pc->GetNamedAttribute(draco::GeometryAttribute::POSITION); - ASSERT_NE(pos_att, nullptr); - - // Ensure the position attribute is of type float32 since the attribute was - // not quantized. - ASSERT_EQ(pos_att->data_type(), draco::DT_FLOAT32); - - // Make sure there is no attribute transform available for the attribute. - ASSERT_EQ(pos_att->GetAttributeTransformData(), nullptr); -} - -} // namespace diff --git a/libs/assimp/contrib/draco/src/draco/compression/encode.cc b/libs/assimp/contrib/draco/src/draco/compression/encode.cc deleted file mode 100644 index f380aec..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/encode.cc +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/encode.h" - -#include "draco/compression/expert_encode.h" - -namespace draco { - -Encoder::Encoder() {} - -Status Encoder::EncodePointCloudToBuffer(const PointCloud &pc, - EncoderBuffer *out_buffer) { - ExpertEncoder encoder(pc); - encoder.Reset(CreateExpertEncoderOptions(pc)); - return encoder.EncodeToBuffer(out_buffer); -} - -Status Encoder::EncodeMeshToBuffer(const Mesh &m, EncoderBuffer *out_buffer) { - ExpertEncoder encoder(m); - encoder.Reset(CreateExpertEncoderOptions(m)); - DRACO_RETURN_IF_ERROR(encoder.EncodeToBuffer(out_buffer)); - set_num_encoded_points(encoder.num_encoded_points()); - set_num_encoded_faces(encoder.num_encoded_faces()); - return OkStatus(); -} - -EncoderOptions Encoder::CreateExpertEncoderOptions(const PointCloud &pc) const { - EncoderOptions ret_options = EncoderOptions::CreateEmptyOptions(); - ret_options.SetGlobalOptions(options().GetGlobalOptions()); - ret_options.SetFeatureOptions(options().GetFeaturelOptions()); - // Convert type-based attribute options to specific attributes in the provided - // point cloud. - for (int i = 0; i < pc.num_attributes(); ++i) { - const Options *att_options = - options().FindAttributeOptions(pc.attribute(i)->attribute_type()); - if (att_options) { - ret_options.SetAttributeOptions(i, *att_options); - } - } - return ret_options; -} - -void Encoder::Reset( - const EncoderOptionsBase &options) { - Base::Reset(options); -} - -void Encoder::Reset() { Base::Reset(); } - -void Encoder::SetSpeedOptions(int encoding_speed, int decoding_speed) { - Base::SetSpeedOptions(encoding_speed, decoding_speed); -} - -void Encoder::SetAttributeQuantization(GeometryAttribute::Type type, - int quantization_bits) { - options().SetAttributeInt(type, "quantization_bits", quantization_bits); -} - -void Encoder::SetAttributeExplicitQuantization(GeometryAttribute::Type type, - int quantization_bits, - int num_dims, - const float *origin, - float range) { - options().SetAttributeInt(type, "quantization_bits", quantization_bits); - options().SetAttributeVector(type, "quantization_origin", num_dims, origin); - options().SetAttributeFloat(type, "quantization_range", range); -} - -void Encoder::SetEncodingMethod(int encoding_method) { - Base::SetEncodingMethod(encoding_method); -} - -Status Encoder::SetAttributePredictionScheme(GeometryAttribute::Type type, - int prediction_scheme_method) { - Status status = CheckPredictionScheme(type, prediction_scheme_method); - if (!status.ok()) { - return status; - } - options().SetAttributeInt(type, "prediction_scheme", - prediction_scheme_method); - return status; -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/encode.h b/libs/assimp/contrib/draco/src/draco/compression/encode.h deleted file mode 100644 index bce8b34..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/encode.h +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ENCODE_H_ -#define DRACO_COMPRESSION_ENCODE_H_ - -#include "draco/compression/config/compression_shared.h" -#include "draco/compression/config/encoder_options.h" -#include "draco/compression/encode_base.h" -#include "draco/core/encoder_buffer.h" -#include "draco/core/status.h" -#include "draco/mesh/mesh.h" - -namespace draco { - -// Basic helper class for encoding geometry using the Draco compression library. -// The class provides various methods that can be used to control several common -// options used during the encoding, such as the number of quantization bits for -// a given attribute. All these options are defined per attribute type, i.e., -// if there are more attributes of the same type (such as multiple texture -// coordinate attributes), the same options are going to be used for all of the -// attributes of this type. If different attributes of the same type need to -// use different options, use ExpertEncoder in expert_encode.h. -class Encoder - : public EncoderBase> { - public: - typedef EncoderBase> Base; - - Encoder(); - virtual ~Encoder() {} - - // Encodes a point cloud to the provided buffer. - virtual Status EncodePointCloudToBuffer(const PointCloud &pc, - EncoderBuffer *out_buffer); - - // Encodes a mesh to the provided buffer. - virtual Status EncodeMeshToBuffer(const Mesh &m, EncoderBuffer *out_buffer); - - // Set encoder options used during the geometry encoding. Note that this call - // overwrites any modifications to the options done with the functions below, - // i.e., it resets the encoder. - void Reset(const EncoderOptionsBase &options); - void Reset(); - - // Sets the desired encoding and decoding speed for the given options. - // - // 0 = slowest speed, but the best compression. - // 10 = fastest, but the worst compression. - // -1 = undefined. - // - // Note that both speed options affect the encoder choice of used methods and - // algorithms. For example, a requirement for fast decoding may prevent the - // encoder from using the best compression methods even if the encoding speed - // is set to 0. In general, the faster of the two options limits the choice of - // features that can be used by the encoder. Additionally, setting - // |decoding_speed| to be faster than the |encoding_speed| may allow the - // encoder to choose the optimal method out of the available features for the - // given |decoding_speed|. - void SetSpeedOptions(int encoding_speed, int decoding_speed); - - // Sets the quantization compression options for a named attribute. The - // attribute values will be quantized in a box defined by the maximum extent - // of the attribute values. I.e., the actual precision of this option depends - // on the scale of the attribute values. - void SetAttributeQuantization(GeometryAttribute::Type type, - int quantization_bits); - - // Sets the explicit quantization compression for a named attribute. The - // attribute values will be quantized in a coordinate system defined by the - // provided origin and range (the input values should be within interval: - // ). - void SetAttributeExplicitQuantization(GeometryAttribute::Type type, - int quantization_bits, int num_dims, - const float *origin, float range); - - // Sets the desired prediction method for a given attribute. By default, - // prediction scheme is selected automatically by the encoder using other - // provided options (such as speed) and input geometry type (mesh, point - // cloud). This function should be called only when a specific prediction is - // preferred (e.g., when it is known that the encoder would select a less - // optimal prediction for the given input data). - // - // |prediction_scheme_method| should be one of the entries defined in - // compression/config/compression_shared.h : - // - // PREDICTION_NONE - use no prediction. - // PREDICTION_DIFFERENCE - delta coding - // MESH_PREDICTION_PARALLELOGRAM - parallelogram prediction for meshes. - // MESH_PREDICTION_CONSTRAINED_PARALLELOGRAM - // - better and more costly version of the parallelogram prediction. - // MESH_PREDICTION_TEX_COORDS_PORTABLE - // - specialized predictor for tex coordinates. - // MESH_PREDICTION_GEOMETRIC_NORMAL - // - specialized predictor for normal coordinates. - // - // Note that in case the desired prediction cannot be used, the default - // prediction will be automatically used instead. - Status SetAttributePredictionScheme(GeometryAttribute::Type type, - int prediction_scheme_method); - - // Sets the desired encoding method for a given geometry. By default, encoding - // method is selected based on the properties of the input geometry and based - // on the other options selected in the used EncoderOptions (such as desired - // encoding and decoding speed). This function should be called only when a - // specific method is required. - // - // |encoding_method| can be one of the values defined in - // compression/config/compression_shared.h based on the type of the input - // geometry that is going to be encoded. For point clouds, allowed entries are - // POINT_CLOUD_SEQUENTIAL_ENCODING - // POINT_CLOUD_KD_TREE_ENCODING - // - // For meshes the input can be - // MESH_SEQUENTIAL_ENCODING - // MESH_EDGEBREAKER_ENCODING - // - // If the selected method cannot be used for the given input, the subsequent - // call of EncodePointCloudToBuffer or EncodeMeshToBuffer is going to fail. - void SetEncodingMethod(int encoding_method); - - protected: - // Creates encoder options for the expert encoder used during the actual - // encoding. - EncoderOptions CreateExpertEncoderOptions(const PointCloud &pc) const; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ENCODE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/encode_base.h b/libs/assimp/contrib/draco/src/draco/compression/encode_base.h deleted file mode 100644 index c501bc4..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/encode_base.h +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ENCODE_BASE_H_ -#define DRACO_COMPRESSION_ENCODE_BASE_H_ - -#include "draco/attributes/geometry_attribute.h" -#include "draco/compression/config/compression_shared.h" -#include "draco/core/status.h" - -namespace draco { - -// Base class for our geometry encoder classes. |EncoderOptionsT| specifies -// options class used by the encoder. Please, see encode.h and expert_encode.h -// for more details and method descriptions. -template -class EncoderBase { - public: - typedef EncoderOptionsT OptionsType; - - EncoderBase() - : options_(EncoderOptionsT::CreateDefaultOptions()), - num_encoded_points_(0), - num_encoded_faces_(0) {} - virtual ~EncoderBase() {} - - const EncoderOptionsT &options() const { return options_; } - EncoderOptionsT &options() { return options_; } - - // If enabled, it tells the encoder to keep track of the number of encoded - // points and faces (default = false). - // Note that this can slow down encoding for certain encoders. - void SetTrackEncodedProperties(bool flag); - - // Returns the number of encoded points and faces during the last encoding - // operation. Returns 0 if SetTrackEncodedProperties() was not set. - size_t num_encoded_points() const { return num_encoded_points_; } - size_t num_encoded_faces() const { return num_encoded_faces_; } - - protected: - void Reset(const EncoderOptionsT &options) { options_ = options; } - - void Reset() { options_ = EncoderOptionsT::CreateDefaultOptions(); } - - void SetSpeedOptions(int encoding_speed, int decoding_speed) { - options_.SetSpeed(encoding_speed, decoding_speed); - } - - void SetEncodingMethod(int encoding_method) { - options_.SetGlobalInt("encoding_method", encoding_method); - } - - void SetEncodingSubmethod(int encoding_submethod) { - options_.SetGlobalInt("encoding_submethod", encoding_submethod); - } - - Status CheckPredictionScheme(GeometryAttribute::Type att_type, - int prediction_scheme) const { - // Out of bound checks: - if (prediction_scheme < PREDICTION_NONE) { - return Status(Status::DRACO_ERROR, - "Invalid prediction scheme requested."); - } - if (prediction_scheme >= NUM_PREDICTION_SCHEMES) { - return Status(Status::DRACO_ERROR, - "Invalid prediction scheme requested."); - } - // Deprecated prediction schemes: - if (prediction_scheme == MESH_PREDICTION_TEX_COORDS_DEPRECATED) { - return Status(Status::DRACO_ERROR, - "MESH_PREDICTION_TEX_COORDS_DEPRECATED is deprecated."); - } - if (prediction_scheme == MESH_PREDICTION_MULTI_PARALLELOGRAM) { - return Status(Status::DRACO_ERROR, - "MESH_PREDICTION_MULTI_PARALLELOGRAM is deprecated."); - } - // Attribute specific checks: - if (prediction_scheme == MESH_PREDICTION_TEX_COORDS_PORTABLE) { - if (att_type != GeometryAttribute::TEX_COORD) { - return Status(Status::DRACO_ERROR, - "Invalid prediction scheme for attribute type."); - } - } - if (prediction_scheme == MESH_PREDICTION_GEOMETRIC_NORMAL) { - if (att_type != GeometryAttribute::NORMAL) { - return Status(Status::DRACO_ERROR, - "Invalid prediction scheme for attribute type."); - } - } - // TODO(hemmer): Try to enable more prediction schemes for normals. - if (att_type == GeometryAttribute::NORMAL) { - if (!(prediction_scheme == PREDICTION_DIFFERENCE || - prediction_scheme == MESH_PREDICTION_GEOMETRIC_NORMAL)) { - return Status(Status::DRACO_ERROR, - "Invalid prediction scheme for attribute type."); - } - } - return OkStatus(); - } - - protected: - void set_num_encoded_points(size_t num) { num_encoded_points_ = num; } - void set_num_encoded_faces(size_t num) { num_encoded_faces_ = num; } - - private: - EncoderOptionsT options_; - - size_t num_encoded_points_; - size_t num_encoded_faces_; -}; - -template -void EncoderBase::SetTrackEncodedProperties(bool flag) { - options_.SetGlobalBool("store_number_of_encoded_points", flag); - options_.SetGlobalBool("store_number_of_encoded_faces", flag); -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ENCODE_BASE_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/encode_test.cc b/libs/assimp/contrib/draco/src/draco/compression/encode_test.cc deleted file mode 100644 index fde4f6f..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/encode_test.cc +++ /dev/null @@ -1,407 +0,0 @@ -// Copyright 2017 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#include "draco/compression/encode.h" - -#include -#include -#include - -#include "draco/attributes/attribute_quantization_transform.h" -#include "draco/compression/config/compression_shared.h" -#include "draco/compression/decode.h" -#include "draco/compression/expert_encode.h" -#include "draco/core/draco_test_base.h" -#include "draco/core/draco_test_utils.h" -#include "draco/core/vector_d.h" -#include "draco/io/obj_decoder.h" -#include "draco/mesh/triangle_soup_mesh_builder.h" -#include "draco/point_cloud/point_cloud_builder.h" - -namespace { - -class EncodeTest : public ::testing::Test { - protected: - EncodeTest() {} - std::unique_ptr CreateTestMesh() const { - draco::TriangleSoupMeshBuilder mesh_builder; - - // Create a simple mesh with one face. - mesh_builder.Start(1); - - // Add one position attribute and two texture coordinate attributes. - const int32_t pos_att_id = mesh_builder.AddAttribute( - draco::GeometryAttribute::POSITION, 3, draco::DT_FLOAT32); - const int32_t tex_att_id_0 = mesh_builder.AddAttribute( - draco::GeometryAttribute::TEX_COORD, 2, draco::DT_FLOAT32); - const int32_t tex_att_id_1 = mesh_builder.AddAttribute( - draco::GeometryAttribute::TEX_COORD, 2, draco::DT_FLOAT32); - - // Initialize the attribute values. - mesh_builder.SetAttributeValuesForFace( - pos_att_id, draco::FaceIndex(0), draco::Vector3f(0.f, 0.f, 0.f).data(), - draco::Vector3f(1.f, 0.f, 0.f).data(), - draco::Vector3f(1.f, 1.f, 0.f).data()); - mesh_builder.SetAttributeValuesForFace( - tex_att_id_0, draco::FaceIndex(0), draco::Vector2f(0.f, 0.f).data(), - draco::Vector2f(1.f, 0.f).data(), draco::Vector2f(1.f, 1.f).data()); - mesh_builder.SetAttributeValuesForFace( - tex_att_id_1, draco::FaceIndex(0), draco::Vector2f(0.f, 0.f).data(), - draco::Vector2f(1.f, 0.f).data(), draco::Vector2f(1.f, 1.f).data()); - - return mesh_builder.Finalize(); - } - - std::unique_ptr CreateTestPointCloud() const { - draco::PointCloudBuilder pc_builder; - - constexpr int kNumPoints = 100; - constexpr int kNumGenAttCoords0 = 4; - constexpr int kNumGenAttCoords1 = 6; - pc_builder.Start(kNumPoints); - - // Add one position attribute and two generic attributes. - const int32_t pos_att_id = pc_builder.AddAttribute( - draco::GeometryAttribute::POSITION, 3, draco::DT_FLOAT32); - const int32_t gen_att_id_0 = pc_builder.AddAttribute( - draco::GeometryAttribute::GENERIC, kNumGenAttCoords0, draco::DT_UINT32); - const int32_t gen_att_id_1 = pc_builder.AddAttribute( - draco::GeometryAttribute::GENERIC, kNumGenAttCoords1, draco::DT_UINT8); - - std::vector gen_att_data_0(kNumGenAttCoords0); - std::vector gen_att_data_1(kNumGenAttCoords1); - - // Initialize the attribute values. - for (draco::PointIndex i(0); i < kNumPoints; ++i) { - const float pos_coord = static_cast(i.value()); - pc_builder.SetAttributeValueForPoint( - pos_att_id, i, - draco::Vector3f(pos_coord, -pos_coord, pos_coord).data()); - - for (int j = 0; j < kNumGenAttCoords0; ++j) { - gen_att_data_0[j] = i.value(); - } - pc_builder.SetAttributeValueForPoint(gen_att_id_0, i, - gen_att_data_0.data()); - - for (int j = 0; j < kNumGenAttCoords1; ++j) { - gen_att_data_1[j] = -i.value(); - } - pc_builder.SetAttributeValueForPoint(gen_att_id_1, i, - gen_att_data_1.data()); - } - return pc_builder.Finalize(false); - } - - std::unique_ptr CreateTestPointCloudPosNorm() const { - draco::PointCloudBuilder pc_builder; - - constexpr int kNumPoints = 20; - pc_builder.Start(kNumPoints); - - // Add one position attribute and a normal attribute. - const int32_t pos_att_id = pc_builder.AddAttribute( - draco::GeometryAttribute::POSITION, 3, draco::DT_FLOAT32); - const int32_t norm_att_id = pc_builder.AddAttribute( - draco::GeometryAttribute::NORMAL, 3, draco::DT_FLOAT32); - - // Initialize the attribute values. - for (draco::PointIndex i(0); i < kNumPoints; ++i) { - const float pos_coord = static_cast(i.value()); - pc_builder.SetAttributeValueForPoint( - pos_att_id, i, - draco::Vector3f(pos_coord, -pos_coord, pos_coord).data()); - - // Pseudo-random normal. - draco::Vector3f norm(pos_coord * 2.f, pos_coord - 2.f, pos_coord * 3.f); - norm.Normalize(); - pc_builder.SetAttributeValueForPoint(norm_att_id, i, norm.data()); - } - - return pc_builder.Finalize(false); - } - - int GetQuantizationBitsFromAttribute(const draco::PointAttribute *att) const { - if (att == nullptr) { - return -1; - } - draco::AttributeQuantizationTransform transform; - if (!transform.InitFromAttribute(*att)) { - return -1; - } - return transform.quantization_bits(); - } - - void VerifyNumQuantizationBits(const draco::EncoderBuffer &buffer, - int pos_quantization, - int tex_coord_0_quantization, - int tex_coord_1_quantization) const { - draco::Decoder decoder; - - // Skip the dequantization for the attributes which will allow us to get - // the number of quantization bits used during encoding. - decoder.SetSkipAttributeTransform(draco::GeometryAttribute::POSITION); - decoder.SetSkipAttributeTransform(draco::GeometryAttribute::TEX_COORD); - - draco::DecoderBuffer in_buffer; - in_buffer.Init(buffer.data(), buffer.size()); - auto mesh = decoder.DecodeMeshFromBuffer(&in_buffer).value(); - ASSERT_NE(mesh, nullptr); - ASSERT_EQ(GetQuantizationBitsFromAttribute(mesh->attribute(0)), - pos_quantization); - ASSERT_EQ(GetQuantizationBitsFromAttribute(mesh->attribute(1)), - tex_coord_0_quantization); - ASSERT_EQ(GetQuantizationBitsFromAttribute(mesh->attribute(2)), - tex_coord_1_quantization); - } - - // Tests that the encoder returns the correct number of encoded points and - // faces for a given mesh or point cloud. - void TestNumberOfEncodedEntries(const std::string &file_name, - int32_t encoding_method) { - std::unique_ptr geometry; - draco::Mesh *mesh = nullptr; - - if (encoding_method == draco::MESH_EDGEBREAKER_ENCODING || - encoding_method == draco::MESH_SEQUENTIAL_ENCODING) { - std::unique_ptr mesh_tmp = - draco::ReadMeshFromTestFile(file_name); - mesh = mesh_tmp.get(); - if (!mesh->DeduplicateAttributeValues()) { - return; - } - mesh->DeduplicatePointIds(); - geometry = std::move(mesh_tmp); - } else { - geometry = draco::ReadPointCloudFromTestFile(file_name); - } - ASSERT_NE(mesh, nullptr); - - draco::Encoder encoder; - encoder.SetAttributeQuantization(draco::GeometryAttribute::POSITION, 14); - encoder.SetAttributeQuantization(draco::GeometryAttribute::TEX_COORD, 12); - encoder.SetAttributeQuantization(draco::GeometryAttribute::NORMAL, 10); - - encoder.SetEncodingMethod(encoding_method); - - encoder.SetTrackEncodedProperties(true); - - draco::EncoderBuffer buffer; - if (mesh) { - encoder.EncodeMeshToBuffer(*mesh, &buffer); - } else { - encoder.EncodePointCloudToBuffer(*geometry, &buffer); - } - - // Ensure the logged number of encoded points and faces matches the number - // we get from the decoder. - - draco::DecoderBuffer decoder_buffer; - decoder_buffer.Init(buffer.data(), buffer.size()); - draco::Decoder decoder; - - if (mesh) { - auto maybe_mesh = decoder.DecodeMeshFromBuffer(&decoder_buffer); - ASSERT_TRUE(maybe_mesh.ok()); - auto decoded_mesh = std::move(maybe_mesh).value(); - ASSERT_NE(decoded_mesh, nullptr); - ASSERT_EQ(decoded_mesh->num_points(), encoder.num_encoded_points()); - ASSERT_EQ(decoded_mesh->num_faces(), encoder.num_encoded_faces()); - } else { - auto maybe_pc = decoder.DecodePointCloudFromBuffer(&decoder_buffer); - ASSERT_TRUE(maybe_pc.ok()); - auto decoded_pc = std::move(maybe_pc).value(); - ASSERT_EQ(decoded_pc->num_points(), encoder.num_encoded_points()); - } - } -}; - -TEST_F(EncodeTest, TestExpertEncoderQuantization) { - // This test verifies that the expert encoder can quantize individual - // attributes even if they have the same type. - auto mesh = CreateTestMesh(); - ASSERT_NE(mesh, nullptr); - - draco::ExpertEncoder encoder(*mesh); - encoder.SetAttributeQuantization(0, 16); // Position quantization. - encoder.SetAttributeQuantization(1, 15); // Tex-coord 0 quantization. - encoder.SetAttributeQuantization(2, 14); // Tex-coord 1 quantization. - - draco::EncoderBuffer buffer; - encoder.EncodeToBuffer(&buffer); - VerifyNumQuantizationBits(buffer, 16, 15, 14); -} - -TEST_F(EncodeTest, TestEncoderQuantization) { - // This test verifies that Encoder applies the same quantization to all - // attributes of the same type. - auto mesh = CreateTestMesh(); - ASSERT_NE(mesh, nullptr); - - draco::Encoder encoder; - encoder.SetAttributeQuantization(draco::GeometryAttribute::POSITION, 16); - encoder.SetAttributeQuantization(draco::GeometryAttribute::TEX_COORD, 15); - - draco::EncoderBuffer buffer; - encoder.EncodeMeshToBuffer(*mesh, &buffer); - VerifyNumQuantizationBits(buffer, 16, 15, 15); -} - -TEST_F(EncodeTest, TestLinesObj) { - // This test verifies that Encoder can encode file that contains only line - // segments (that are ignored). - std::unique_ptr mesh( - draco::ReadMeshFromTestFile("test_lines.obj")); - ASSERT_NE(mesh, nullptr); - ASSERT_EQ(mesh->num_faces(), 0); - std::unique_ptr pc( - draco::ReadPointCloudFromTestFile("test_lines.obj")); - ASSERT_NE(pc, nullptr); - - draco::Encoder encoder; - encoder.SetAttributeQuantization(draco::GeometryAttribute::POSITION, 16); - - draco::EncoderBuffer buffer; - ASSERT_TRUE(encoder.EncodePointCloudToBuffer(*pc, &buffer).ok()); -} - -TEST_F(EncodeTest, TestQuantizedInfinity) { - // This test verifies that Encoder fails to encode point cloud when requesting - // quantization of attribute that contains infinity values. - std::unique_ptr pc( - draco::ReadPointCloudFromTestFile("float_inf_point_cloud.ply")); - ASSERT_NE(pc, nullptr); - - { - draco::Encoder encoder; - encoder.SetEncodingMethod(draco::POINT_CLOUD_SEQUENTIAL_ENCODING); - encoder.SetAttributeQuantization(draco::GeometryAttribute::POSITION, 11); - - draco::EncoderBuffer buffer; - ASSERT_FALSE(encoder.EncodePointCloudToBuffer(*pc, &buffer).ok()); - } - - { - draco::Encoder encoder; - encoder.SetEncodingMethod(draco::POINT_CLOUD_KD_TREE_ENCODING); - encoder.SetAttributeQuantization(draco::GeometryAttribute::POSITION, 11); - - draco::EncoderBuffer buffer; - ASSERT_FALSE(encoder.EncodePointCloudToBuffer(*pc, &buffer).ok()); - } -} - -TEST_F(EncodeTest, TestUnquantizedInfinity) { - // This test verifies that Encoder can successfully encode point cloud when - // not requesting quantization of attribute that contains infinity values. - std::unique_ptr pc( - draco::ReadPointCloudFromTestFile("float_inf_point_cloud.ply")); - ASSERT_NE(pc, nullptr); - - // Note that the KD tree encoding method is not applicable to float values. - draco::Encoder encoder; - encoder.SetEncodingMethod(draco::POINT_CLOUD_SEQUENTIAL_ENCODING); - - draco::EncoderBuffer buffer; - ASSERT_TRUE(encoder.EncodePointCloudToBuffer(*pc, &buffer).ok()); -} - -TEST_F(EncodeTest, TestQuantizedAndUnquantizedAttributes) { - // This test verifies that Encoder can successfully encode point cloud with - // two float attribiutes - one quantized and another unquantized. The encoder - // defaults to sequential encoding in this case. - std::unique_ptr pc( - draco::ReadPointCloudFromTestFile("float_two_att_point_cloud.ply")); - ASSERT_NE(pc, nullptr); - - draco::Encoder encoder; - encoder.SetAttributeQuantization(draco::GeometryAttribute::POSITION, 11); - encoder.SetAttributeQuantization(draco::GeometryAttribute::NORMAL, 0); - draco::EncoderBuffer buffer; - ASSERT_TRUE(encoder.EncodePointCloudToBuffer(*pc, &buffer).ok()); -} - -TEST_F(EncodeTest, TestKdTreeEncoding) { - // This test verifies that the API can successfully encode a point cloud - // defined by several attributes using the kd tree method. - std::unique_ptr pc = CreateTestPointCloud(); - ASSERT_NE(pc, nullptr); - - draco::EncoderBuffer buffer; - draco::Encoder encoder; - encoder.SetEncodingMethod(draco::POINT_CLOUD_KD_TREE_ENCODING); - // First try it without quantizing positions which should fail. - ASSERT_FALSE(encoder.EncodePointCloudToBuffer(*pc, &buffer).ok()); - - // Now set quantization for the position attribute which should make - // the encoder happy. - encoder.SetAttributeQuantization(draco::GeometryAttribute::POSITION, 16); - ASSERT_TRUE(encoder.EncodePointCloudToBuffer(*pc, &buffer).ok()); -} - -TEST_F(EncodeTest, TestTrackingOfNumberOfEncodedEntries) { - TestNumberOfEncodedEntries("deg_faces.obj", draco::MESH_EDGEBREAKER_ENCODING); - TestNumberOfEncodedEntries("deg_faces.obj", draco::MESH_SEQUENTIAL_ENCODING); - TestNumberOfEncodedEntries("cube_att.obj", draco::MESH_EDGEBREAKER_ENCODING); - TestNumberOfEncodedEntries("test_nm.obj", draco::MESH_EDGEBREAKER_ENCODING); - TestNumberOfEncodedEntries("test_nm.obj", draco::MESH_SEQUENTIAL_ENCODING); - TestNumberOfEncodedEntries("cube_subd.obj", - draco::POINT_CLOUD_KD_TREE_ENCODING); - TestNumberOfEncodedEntries("cube_subd.obj", - draco::POINT_CLOUD_SEQUENTIAL_ENCODING); -} - -TEST_F(EncodeTest, TestTrackingOfNumberOfEncodedEntriesNotSet) { - // Tests that when tracing of encoded properties is disabled, the returned - // number of encoded faces and points is 0. - std::unique_ptr mesh( - draco::ReadMeshFromTestFile("cube_att.obj")); - ASSERT_NE(mesh, nullptr); - - draco::EncoderBuffer buffer; - draco::Encoder encoder; - - ASSERT_TRUE(encoder.EncodeMeshToBuffer(*mesh, &buffer).ok()); - ASSERT_EQ(encoder.num_encoded_points(), 0); - ASSERT_EQ(encoder.num_encoded_faces(), 0); -} - -TEST_F(EncodeTest, TestNoPosQuantizationNormalCoding) { - // Tests that we can encode and decode a file with quantized normals but - // non-quantized positions. - const auto mesh = draco::ReadMeshFromTestFile("test_nm.obj"); - ASSERT_NE(mesh, nullptr); - - // The mesh should have positions and normals. - ASSERT_NE(mesh->GetNamedAttribute(draco::GeometryAttribute::POSITION), - nullptr); - ASSERT_NE(mesh->GetNamedAttribute(draco::GeometryAttribute::NORMAL), nullptr); - - draco::EncoderBuffer buffer; - draco::Encoder encoder; - // No quantization for positions. - encoder.SetAttributeQuantization(draco::GeometryAttribute::NORMAL, 8); - - DRACO_ASSERT_OK(encoder.EncodeMeshToBuffer(*mesh, &buffer)); - - draco::Decoder decoder; - - draco::DecoderBuffer in_buffer; - in_buffer.Init(buffer.data(), buffer.size()); - const auto decoded_mesh = decoder.DecodeMeshFromBuffer(&in_buffer).value(); - ASSERT_NE(decoded_mesh, nullptr); -} - -} // namespace diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/ans.h b/libs/assimp/contrib/draco/src/draco/compression/entropy/ans.h deleted file mode 100644 index c71d589..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/ans.h +++ /dev/null @@ -1,527 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ENTROPY_ANS_H_ -#define DRACO_COMPRESSION_ENTROPY_ANS_H_ -// An implementation of Asymmetric Numeral Systems (rANS). -// See http://arxiv.org/abs/1311.2540v2 for more information on rANS. -// This file is based off libvpx's ans.h. - -#include - -#define DRACO_ANS_DIVIDE_BY_MULTIPLY 1 -#if DRACO_ANS_DIVIDE_BY_MULTIPLY -#include "draco/core/divide.h" -#endif -#include "draco/core/macros.h" - -namespace draco { - -#if DRACO_ANS_DIVIDE_BY_MULTIPLY - -#define DRACO_ANS_DIVREM(quotient, remainder, dividend, divisor) \ - do { \ - quotient = fastdiv(dividend, divisor); \ - remainder = dividend - quotient * divisor; \ - } while (0) -#define DRACO_ANS_DIV(dividend, divisor) fastdiv(dividend, divisor) -#else -#define DRACO_ANS_DIVREM(quotient, remainder, dividend, divisor) \ - do { \ - quotient = dividend / divisor; \ - remainder = dividend % divisor; \ - } while (0) -#define DRACO_ANS_DIV(dividend, divisor) ((dividend) / (divisor)) -#endif - -struct AnsCoder { - AnsCoder() : buf(nullptr), buf_offset(0), state(0) {} - uint8_t *buf; - int buf_offset; - uint32_t state; -}; - -struct AnsDecoder { - AnsDecoder() : buf(nullptr), buf_offset(0), state(0) {} - const uint8_t *buf; - int buf_offset; - uint32_t state; -}; - -typedef uint8_t AnsP8; -#define DRACO_ANS_P8_PRECISION 256u -#define DRACO_ANS_L_BASE (4096u) -#define DRACO_ANS_IO_BASE 256 - -static uint32_t mem_get_le16(const void *vmem) { - uint32_t val; - const uint8_t *mem = (const uint8_t *)vmem; - - val = mem[1] << 8; - val |= mem[0]; - return val; -} - -static uint32_t mem_get_le24(const void *vmem) { - uint32_t val; - const uint8_t *mem = (const uint8_t *)vmem; - - val = mem[2] << 16; - val |= mem[1] << 8; - val |= mem[0]; - return val; -} - -static inline uint32_t mem_get_le32(const void *vmem) { - uint32_t val; - const uint8_t *mem = (const uint8_t *)vmem; - - val = mem[3] << 24; - val |= mem[2] << 16; - val |= mem[1] << 8; - val |= mem[0]; - return val; -} - -static inline void mem_put_le16(void *vmem, uint32_t val) { - uint8_t *mem = reinterpret_cast(vmem); - - mem[0] = (val >> 0) & 0xff; - mem[1] = (val >> 8) & 0xff; -} - -static inline void mem_put_le24(void *vmem, uint32_t val) { - uint8_t *mem = reinterpret_cast(vmem); - - mem[0] = (val >> 0) & 0xff; - mem[1] = (val >> 8) & 0xff; - mem[2] = (val >> 16) & 0xff; -} - -static inline void mem_put_le32(void *vmem, uint32_t val) { - uint8_t *mem = reinterpret_cast(vmem); - - mem[0] = (val >> 0) & 0xff; - mem[1] = (val >> 8) & 0xff; - mem[2] = (val >> 16) & 0xff; - mem[3] = (val >> 24) & 0xff; -} - -static inline void ans_write_init(struct AnsCoder *const ans, - uint8_t *const buf) { - ans->buf = buf; - ans->buf_offset = 0; - ans->state = DRACO_ANS_L_BASE; -} - -static inline int ans_write_end(struct AnsCoder *const ans) { - uint32_t state; - DRACO_DCHECK_GE(ans->state, DRACO_ANS_L_BASE); - DRACO_DCHECK_LT(ans->state, DRACO_ANS_L_BASE * DRACO_ANS_IO_BASE); - state = ans->state - DRACO_ANS_L_BASE; - if (state < (1 << 6)) { - ans->buf[ans->buf_offset] = (0x00 << 6) + state; - return ans->buf_offset + 1; - } else if (state < (1 << 14)) { - mem_put_le16(ans->buf + ans->buf_offset, (0x01 << 14) + state); - return ans->buf_offset + 2; - } else if (state < (1 << 22)) { - mem_put_le24(ans->buf + ans->buf_offset, (0x02 << 22) + state); - return ans->buf_offset + 3; - } else { - DRACO_DCHECK(0 && "State is too large to be serialized"); - return ans->buf_offset; - } -} - -// rABS with descending spread. -// p or p0 takes the place of l_s from the paper. -// DRACO_ANS_P8_PRECISION is m. -static inline void rabs_desc_write(struct AnsCoder *ans, int val, AnsP8 p0) { - const AnsP8 p = DRACO_ANS_P8_PRECISION - p0; - const unsigned l_s = val ? p : p0; - unsigned quot, rem; - if (ans->state >= - DRACO_ANS_L_BASE / DRACO_ANS_P8_PRECISION * DRACO_ANS_IO_BASE * l_s) { - ans->buf[ans->buf_offset++] = ans->state % DRACO_ANS_IO_BASE; - ans->state /= DRACO_ANS_IO_BASE; - } - DRACO_ANS_DIVREM(quot, rem, ans->state, l_s); - ans->state = quot * DRACO_ANS_P8_PRECISION + rem + (val ? 0 : p); -} - -#define DRACO_ANS_IMPL1 0 -#define UNPREDICTABLE(x) x -static inline int rabs_desc_read(struct AnsDecoder *ans, AnsP8 p0) { - int val; -#if DRACO_ANS_IMPL1 - unsigned l_s; -#else - unsigned quot, rem, x, xn; -#endif - const AnsP8 p = DRACO_ANS_P8_PRECISION - p0; - if (ans->state < DRACO_ANS_L_BASE && ans->buf_offset > 0) { - ans->state = ans->state * DRACO_ANS_IO_BASE + ans->buf[--ans->buf_offset]; - } -#if DRACO_ANS_IMPL1 - val = ans->state % DRACO_ANS_P8_PRECISION < p; - l_s = val ? p : p0; - ans->state = (ans->state / DRACO_ANS_P8_PRECISION) * l_s + - ans->state % DRACO_ANS_P8_PRECISION - (!val * p); -#else - x = ans->state; - quot = x / DRACO_ANS_P8_PRECISION; - rem = x % DRACO_ANS_P8_PRECISION; - xn = quot * p; - val = rem < p; - if (UNPREDICTABLE(val)) { - ans->state = xn + rem; - } else { - // ans->state = quot * p0 + rem - p; - ans->state = x - xn - p; - } -#endif - return val; -} - -// rABS with ascending spread. -// p or p0 takes the place of l_s from the paper. -// DRACO_ANS_P8_PRECISION is m. -static inline void rabs_asc_write(struct AnsCoder *ans, int val, AnsP8 p0) { - const AnsP8 p = DRACO_ANS_P8_PRECISION - p0; - const unsigned l_s = val ? p : p0; - unsigned quot, rem; - if (ans->state >= - DRACO_ANS_L_BASE / DRACO_ANS_P8_PRECISION * DRACO_ANS_IO_BASE * l_s) { - ans->buf[ans->buf_offset++] = ans->state % DRACO_ANS_IO_BASE; - ans->state /= DRACO_ANS_IO_BASE; - } - DRACO_ANS_DIVREM(quot, rem, ans->state, l_s); - ans->state = quot * DRACO_ANS_P8_PRECISION + rem + (val ? p0 : 0); -} - -static inline int rabs_asc_read(struct AnsDecoder *ans, AnsP8 p0) { - int val; -#if DRACO_ANS_IMPL1 - unsigned l_s; -#else - unsigned quot, rem, x, xn; -#endif - const AnsP8 p = DRACO_ANS_P8_PRECISION - p0; - if (ans->state < DRACO_ANS_L_BASE) { - ans->state = ans->state * DRACO_ANS_IO_BASE + ans->buf[--ans->buf_offset]; - } -#if DRACO_ANS_IMPL1 - val = ans->state % DRACO_ANS_P8_PRECISION < p; - l_s = val ? p : p0; - ans->state = (ans->state / DRACO_ANS_P8_PRECISION) * l_s + - ans->state % DRACO_ANS_P8_PRECISION - (!val * p); -#else - x = ans->state; - quot = x / DRACO_ANS_P8_PRECISION; - rem = x % DRACO_ANS_P8_PRECISION; - xn = quot * p; - val = rem >= p0; - if (UNPREDICTABLE(val)) { - ans->state = xn + rem - p0; - } else { - // ans->state = quot * p0 + rem - p0; - ans->state = x - xn; - } -#endif - return val; -} - -#define rabs_read rabs_desc_read -#define rabs_write rabs_desc_write - -// uABS with normalization. -static inline void uabs_write(struct AnsCoder *ans, int val, AnsP8 p0) { - AnsP8 p = DRACO_ANS_P8_PRECISION - p0; - const unsigned l_s = val ? p : p0; - while (ans->state >= - DRACO_ANS_L_BASE / DRACO_ANS_P8_PRECISION * DRACO_ANS_IO_BASE * l_s) { - ans->buf[ans->buf_offset++] = ans->state % DRACO_ANS_IO_BASE; - ans->state /= DRACO_ANS_IO_BASE; - } - if (!val) { - ans->state = DRACO_ANS_DIV(ans->state * DRACO_ANS_P8_PRECISION, p0); - } else { - ans->state = - DRACO_ANS_DIV((ans->state + 1) * DRACO_ANS_P8_PRECISION + p - 1, p) - 1; - } -} - -static inline int uabs_read(struct AnsDecoder *ans, AnsP8 p0) { - AnsP8 p = DRACO_ANS_P8_PRECISION - p0; - int s; - // unsigned int xp1; - unsigned xp, sp; - unsigned state = ans->state; - while (state < DRACO_ANS_L_BASE && ans->buf_offset > 0) { - state = state * DRACO_ANS_IO_BASE + ans->buf[--ans->buf_offset]; - } - sp = state * p; - // xp1 = (sp + p) / DRACO_ANS_P8_PRECISION; - xp = sp / DRACO_ANS_P8_PRECISION; - // s = xp1 - xp; - s = (sp & 0xFF) >= p0; - if (UNPREDICTABLE(s)) { - ans->state = xp; - } else { - ans->state = state - xp; - } - return s; -} - -static inline int uabs_read_bit(struct AnsDecoder *ans) { - int s; - unsigned state = ans->state; - while (state < DRACO_ANS_L_BASE && ans->buf_offset > 0) { - state = state * DRACO_ANS_IO_BASE + ans->buf[--ans->buf_offset]; - } - s = static_cast(state & 1); - ans->state = state >> 1; - return s; -} - -static inline int ans_read_init(struct AnsDecoder *const ans, - const uint8_t *const buf, int offset) { - unsigned x; - if (offset < 1) { - return 1; - } - ans->buf = buf; - x = buf[offset - 1] >> 6; - if (x == 0) { - ans->buf_offset = offset - 1; - ans->state = buf[offset - 1] & 0x3F; - } else if (x == 1) { - if (offset < 2) { - return 1; - } - ans->buf_offset = offset - 2; - ans->state = mem_get_le16(buf + offset - 2) & 0x3FFF; - } else if (x == 2) { - if (offset < 3) { - return 1; - } - ans->buf_offset = offset - 3; - ans->state = mem_get_le24(buf + offset - 3) & 0x3FFFFF; - } else { - return 1; - } - ans->state += DRACO_ANS_L_BASE; - if (ans->state >= DRACO_ANS_L_BASE * DRACO_ANS_IO_BASE) { - return 1; - } - return 0; -} - -static inline int ans_read_end(struct AnsDecoder *const ans) { - return ans->state == DRACO_ANS_L_BASE; -} - -static inline int ans_reader_has_error(const struct AnsDecoder *const ans) { - return ans->state < DRACO_ANS_L_BASE && ans->buf_offset == 0; -} - -struct rans_sym { - uint32_t prob; - uint32_t cum_prob; // not-inclusive. -}; - -// Class for performing rANS encoding using a desired number of precision bits. -// The max number of precision bits is currently 19. The actual number of -// symbols in the input alphabet should be (much) smaller than that, otherwise -// the compression rate may suffer. -template -class RAnsEncoder { - public: - RAnsEncoder() {} - - // Provides the input buffer where the data is going to be stored. - inline void write_init(uint8_t *const buf) { - ans_.buf = buf; - ans_.buf_offset = 0; - ans_.state = l_rans_base; - } - - // Needs to be called after all symbols are encoded. - inline int write_end() { - uint32_t state; - DRACO_DCHECK_GE(ans_.state, l_rans_base); - DRACO_DCHECK_LT(ans_.state, l_rans_base * DRACO_ANS_IO_BASE); - state = ans_.state - l_rans_base; - if (state < (1 << 6)) { - ans_.buf[ans_.buf_offset] = (0x00 << 6) + state; - return ans_.buf_offset + 1; - } else if (state < (1 << 14)) { - mem_put_le16(ans_.buf + ans_.buf_offset, (0x01 << 14) + state); - return ans_.buf_offset + 2; - } else if (state < (1 << 22)) { - mem_put_le24(ans_.buf + ans_.buf_offset, (0x02 << 22) + state); - return ans_.buf_offset + 3; - } else if (state < (1 << 30)) { - mem_put_le32(ans_.buf + ans_.buf_offset, (0x03u << 30u) + state); - return ans_.buf_offset + 4; - } else { - DRACO_DCHECK(0 && "State is too large to be serialized"); - return ans_.buf_offset; - } - } - - // rANS with normalization. - // sym->prob takes the place of l_s from the paper. - // rans_precision is m. - inline void rans_write(const struct rans_sym *const sym) { - const uint32_t p = sym->prob; - while (ans_.state >= l_rans_base / rans_precision * DRACO_ANS_IO_BASE * p) { - ans_.buf[ans_.buf_offset++] = ans_.state % DRACO_ANS_IO_BASE; - ans_.state /= DRACO_ANS_IO_BASE; - } - // TODO(ostava): The division and multiplication should be optimized. - ans_.state = - (ans_.state / p) * rans_precision + ans_.state % p + sym->cum_prob; - } - - private: - static constexpr int rans_precision = 1 << rans_precision_bits_t; - static constexpr int l_rans_base = rans_precision * 4; - AnsCoder ans_; -}; - -struct rans_dec_sym { - uint32_t val; - uint32_t prob; - uint32_t cum_prob; // not-inclusive. -}; - -// Class for performing rANS decoding using a desired number of precision bits. -// The number of precision bits needs to be the same as with the RAnsEncoder -// that was used to encode the input data. -template -class RAnsDecoder { - public: - RAnsDecoder() {} - - // Initializes the decoder from the input buffer. The |offset| specifies the - // number of bytes encoded by the encoder. A non zero return value is an - // error. - inline int read_init(const uint8_t *const buf, int offset) { - unsigned x; - if (offset < 1) { - return 1; - } - ans_.buf = buf; - x = buf[offset - 1] >> 6; - if (x == 0) { - ans_.buf_offset = offset - 1; - ans_.state = buf[offset - 1] & 0x3F; - } else if (x == 1) { - if (offset < 2) { - return 1; - } - ans_.buf_offset = offset - 2; - ans_.state = mem_get_le16(buf + offset - 2) & 0x3FFF; - } else if (x == 2) { - if (offset < 3) { - return 1; - } - ans_.buf_offset = offset - 3; - ans_.state = mem_get_le24(buf + offset - 3) & 0x3FFFFF; - } else if (x == 3) { - ans_.buf_offset = offset - 4; - ans_.state = mem_get_le32(buf + offset - 4) & 0x3FFFFFFF; - } else { - return 1; - } - ans_.state += l_rans_base; - if (ans_.state >= l_rans_base * DRACO_ANS_IO_BASE) { - return 1; - } - return 0; - } - - inline int read_end() { return ans_.state == l_rans_base; } - - inline int reader_has_error() { - return ans_.state < l_rans_base && ans_.buf_offset == 0; - } - - inline int rans_read() { - unsigned rem; - unsigned quo; - struct rans_dec_sym sym; - while (ans_.state < l_rans_base && ans_.buf_offset > 0) { - ans_.state = ans_.state * DRACO_ANS_IO_BASE + ans_.buf[--ans_.buf_offset]; - } - // |rans_precision| is a power of two compile time constant, and the below - // division and modulo are going to be optimized by the compiler. - quo = ans_.state / rans_precision; - rem = ans_.state % rans_precision; - fetch_sym(&sym, rem); - ans_.state = quo * sym.prob + rem - sym.cum_prob; - return sym.val; - } - - // Construct a lookup table with |rans_precision| number of entries. - // Returns false if the table couldn't be built (because of wrong input data). - inline bool rans_build_look_up_table(const uint32_t token_probs[], - uint32_t num_symbols) { - lut_table_.resize(rans_precision); - probability_table_.resize(num_symbols); - uint32_t cum_prob = 0; - uint32_t act_prob = 0; - for (uint32_t i = 0; i < num_symbols; ++i) { - probability_table_[i].prob = token_probs[i]; - probability_table_[i].cum_prob = cum_prob; - cum_prob += token_probs[i]; - if (cum_prob > rans_precision) { - return false; - } - for (uint32_t j = act_prob; j < cum_prob; ++j) { - lut_table_[j] = i; - } - act_prob = cum_prob; - } - if (cum_prob != rans_precision) { - return false; - } - return true; - } - - private: - inline void fetch_sym(struct rans_dec_sym *out, uint32_t rem) { - uint32_t symbol = lut_table_[rem]; - out->val = symbol; - out->prob = probability_table_[symbol].prob; - out->cum_prob = probability_table_[symbol].cum_prob; - } - - static constexpr int rans_precision = 1 << rans_precision_bits_t; - static constexpr int l_rans_base = rans_precision * 4; - std::vector lut_table_; - std::vector probability_table_; - AnsDecoder ans_; -}; - -#undef DRACO_ANS_DIVREM -#undef DRACO_ANS_P8_PRECISION -#undef DRACO_ANS_L_BASE -#undef DRACO_ANS_IO_BASE - -} // namespace draco - -#endif // DRACO_COMPRESSION_ENTROPY_ANS_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_coding.h b/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_coding.h deleted file mode 100644 index cd42711..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_coding.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File providing shared functionality for RAnsSymbolEncoder and -// RAnsSymbolDecoder (see rans_symbol_encoder.h / rans_symbol_decoder.h). -#ifndef DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_CODING_H_ -#define DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_CODING_H_ - -#include "draco/compression/entropy/ans.h" - -namespace draco { - -// Computes the desired precision of the rANS method for the specified number of -// unique symbols the input data (defined by their bit_length). -constexpr int ComputeRAnsUnclampedPrecision(int symbols_bit_length) { - return (3 * symbols_bit_length) / 2; -} - -// Computes the desired precision clamped to guarantee a valid functionality of -// our rANS library (which is between 12 to 20 bits). -constexpr int ComputeRAnsPrecisionFromUniqueSymbolsBitLength( - int symbols_bit_length) { - return ComputeRAnsUnclampedPrecision(symbols_bit_length) < 12 ? 12 - : ComputeRAnsUnclampedPrecision(symbols_bit_length) > 20 - ? 20 - : ComputeRAnsUnclampedPrecision(symbols_bit_length); -} - -// Compute approximate frequency table size needed for storing the provided -// symbols. -static inline int64_t ApproximateRAnsFrequencyTableBits( - int32_t max_value, int num_unique_symbols) { - // Approximate number of bits for storing zero frequency entries using the - // run length encoding (with max length of 64). - const int64_t table_zero_frequency_bits = - 8 * (num_unique_symbols + (max_value - num_unique_symbols) / 64); - return 8 * num_unique_symbols + table_zero_frequency_bits; -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_CODING_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_decoder.h b/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_decoder.h deleted file mode 100644 index 10cdc67..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_decoder.h +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_DECODER_H_ -#define DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_DECODER_H_ - -#include "draco/compression/config/compression_shared.h" -#include "draco/compression/entropy/rans_symbol_coding.h" -#include "draco/core/decoder_buffer.h" -#include "draco/core/varint_decoding.h" -#include "draco/draco_features.h" - -namespace draco { - -// A helper class for decoding symbols using the rANS algorithm (see ans.h). -// The class can be used to decode the probability table and the data encoded -// by the RAnsSymbolEncoder. |unique_symbols_bit_length_t| must be the same as -// the one used for the corresponding RAnsSymbolEncoder. -template -class RAnsSymbolDecoder { - public: - RAnsSymbolDecoder() : num_symbols_(0) {} - - // Initialize the decoder and decode the probability table. - bool Create(DecoderBuffer *buffer); - - uint32_t num_symbols() const { return num_symbols_; } - - // Starts decoding from the buffer. The buffer will be advanced past the - // encoded data after this call. - bool StartDecoding(DecoderBuffer *buffer); - uint32_t DecodeSymbol() { return ans_.rans_read(); } - void EndDecoding(); - - private: - static constexpr int rans_precision_bits_ = - ComputeRAnsPrecisionFromUniqueSymbolsBitLength( - unique_symbols_bit_length_t); - static constexpr int rans_precision_ = 1 << rans_precision_bits_; - - std::vector probability_table_; - uint32_t num_symbols_; - RAnsDecoder ans_; -}; - -template -bool RAnsSymbolDecoder::Create( - DecoderBuffer *buffer) { - // Check that the DecoderBuffer version is set. - if (buffer->bitstream_version() == 0) { - return false; - } - // Decode the number of alphabet symbols. -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 0)) { - if (!buffer->Decode(&num_symbols_)) { - return false; - } - - } else -#endif - { - if (!DecodeVarint(&num_symbols_, buffer)) { - return false; - } - } - probability_table_.resize(num_symbols_); - if (num_symbols_ == 0) { - return true; - } - // Decode the table. - for (uint32_t i = 0; i < num_symbols_; ++i) { - uint8_t prob_data = 0; - // Decode the first byte and extract the number of extra bytes we need to - // get, or the offset to the next symbol with non-zero probability. - if (!buffer->Decode(&prob_data)) { - return false; - } - // Token is stored in the first two bits of the first byte. Values 0-2 are - // used to indicate the number of extra bytes, and value 3 is a special - // symbol used to denote run-length coding of zero probability entries. - // See rans_symbol_encoder.h for more details. - const int token = prob_data & 3; - if (token == 3) { - const uint32_t offset = prob_data >> 2; - if (i + offset >= num_symbols_) { - return false; - } - // Set zero probability for all symbols in the specified range. - for (uint32_t j = 0; j < offset + 1; ++j) { - probability_table_[i + j] = 0; - } - i += offset; - } else { - const int extra_bytes = token; - uint32_t prob = prob_data >> 2; - for (int b = 0; b < extra_bytes; ++b) { - uint8_t eb; - if (!buffer->Decode(&eb)) { - return false; - } - // Shift 8 bits for each extra byte and subtract 2 for the two first - // bits. - prob |= static_cast(eb) << (8 * (b + 1) - 2); - } - probability_table_[i] = prob; - } - } - if (!ans_.rans_build_look_up_table(&probability_table_[0], num_symbols_)) { - return false; - } - return true; -} - -template -bool RAnsSymbolDecoder::StartDecoding( - DecoderBuffer *buffer) { - uint64_t bytes_encoded; - // Decode the number of bytes encoded by the encoder. -#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED - if (buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 0)) { - if (!buffer->Decode(&bytes_encoded)) { - return false; - } - - } else -#endif - { - if (!DecodeVarint(&bytes_encoded, buffer)) { - return false; - } - } - if (bytes_encoded > static_cast(buffer->remaining_size())) { - return false; - } - const uint8_t *const data_head = - reinterpret_cast(buffer->data_head()); - // Advance the buffer past the rANS data. - buffer->Advance(bytes_encoded); - if (ans_.read_init(data_head, static_cast(bytes_encoded)) != 0) { - return false; - } - return true; -} - -template -void RAnsSymbolDecoder::EndDecoding() { - ans_.read_end(); -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_DECODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_encoder.h b/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_encoder.h deleted file mode 100644 index 4e07ec8..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/rans_symbol_encoder.h +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_ENCODER_H_ -#define DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_ENCODER_H_ - -#include -#include -#include - -#include "draco/compression/entropy/ans.h" -#include "draco/compression/entropy/rans_symbol_coding.h" -#include "draco/core/encoder_buffer.h" -#include "draco/core/varint_encoding.h" - -namespace draco { - -// A helper class for encoding symbols using the rANS algorithm (see ans.h). -// The class can be used to initialize and encode probability table needed by -// rANS, and to perform encoding of symbols into the provided EncoderBuffer. -template -class RAnsSymbolEncoder { - public: - RAnsSymbolEncoder() - : num_symbols_(0), num_expected_bits_(0), buffer_offset_(0) {} - - // Creates a probability table needed by the rANS library and encode it into - // the provided buffer. - bool Create(const uint64_t *frequencies, int num_symbols, - EncoderBuffer *buffer); - - void StartEncoding(EncoderBuffer *buffer); - void EncodeSymbol(uint32_t symbol) { - ans_.rans_write(&probability_table_[symbol]); - } - void EndEncoding(EncoderBuffer *buffer); - - // rANS requires to encode the input symbols in the reverse order. - static constexpr bool needs_reverse_encoding() { return true; } - - private: - // Functor used for sorting symbol ids according to their probabilities. - // The functor sorts symbol indices that index an underlying map between - // symbol ids and their probabilities. We don't sort the probability table - // directly, because that would require an additional indirection during the - // EncodeSymbol() function. - struct ProbabilityLess { - explicit ProbabilityLess(const std::vector *probs) - : probabilities(probs) {} - bool operator()(int i, int j) const { - return probabilities->at(i).prob < probabilities->at(j).prob; - } - const std::vector *probabilities; - }; - - // Encodes the probability table into the output buffer. - bool EncodeTable(EncoderBuffer *buffer); - - static constexpr int rans_precision_bits_ = - ComputeRAnsPrecisionFromUniqueSymbolsBitLength( - unique_symbols_bit_length_t); - static constexpr int rans_precision_ = 1 << rans_precision_bits_; - - std::vector probability_table_; - // The number of symbols in the input alphabet. - uint32_t num_symbols_; - // Expected number of bits that is needed to encode the input. - uint64_t num_expected_bits_; - - RAnsEncoder ans_; - // Initial offset of the encoder buffer before any ans data was encoded. - uint64_t buffer_offset_; -}; - -template -bool RAnsSymbolEncoder::Create( - const uint64_t *frequencies, int num_symbols, EncoderBuffer *buffer) { - // Compute the total of the input frequencies. - uint64_t total_freq = 0; - int max_valid_symbol = 0; - for (int i = 0; i < num_symbols; ++i) { - total_freq += frequencies[i]; - if (frequencies[i] > 0) { - max_valid_symbol = i; - } - } - num_symbols = max_valid_symbol + 1; - num_symbols_ = num_symbols; - probability_table_.resize(num_symbols); - const double total_freq_d = static_cast(total_freq); - const double rans_precision_d = static_cast(rans_precision_); - // Compute probabilities by rescaling the normalized frequencies into interval - // [1, rans_precision - 1]. The total probability needs to be equal to - // rans_precision. - int total_rans_prob = 0; - for (int i = 0; i < num_symbols; ++i) { - const uint64_t freq = frequencies[i]; - - // Normalized probability. - const double prob = static_cast(freq) / total_freq_d; - - // RAns probability in range of [1, rans_precision - 1]. - uint32_t rans_prob = static_cast(prob * rans_precision_d + 0.5f); - if (rans_prob == 0 && freq > 0) { - rans_prob = 1; - } - probability_table_[i].prob = rans_prob; - total_rans_prob += rans_prob; - } - // Because of rounding errors, the total precision may not be exactly accurate - // and we may need to adjust the entries a little bit. - if (total_rans_prob != rans_precision_) { - std::vector sorted_probabilities(num_symbols); - for (int i = 0; i < num_symbols; ++i) { - sorted_probabilities[i] = i; - } - std::sort(sorted_probabilities.begin(), sorted_probabilities.end(), - ProbabilityLess(&probability_table_)); - if (total_rans_prob < rans_precision_) { - // This happens rather infrequently, just add the extra needed precision - // to the most frequent symbol. - probability_table_[sorted_probabilities.back()].prob += - rans_precision_ - total_rans_prob; - } else { - // We have over-allocated the precision, which is quite common. - // Rescale the probabilities of all symbols. - int32_t error = total_rans_prob - rans_precision_; - while (error > 0) { - const double act_total_prob_d = static_cast(total_rans_prob); - const double act_rel_error_d = rans_precision_d / act_total_prob_d; - for (int j = num_symbols - 1; j > 0; --j) { - int symbol_id = sorted_probabilities[j]; - if (probability_table_[symbol_id].prob <= 1) { - if (j == num_symbols - 1) { - return false; // Most frequent symbol would be empty. - } - break; - } - const int32_t new_prob = static_cast( - floor(act_rel_error_d * - static_cast(probability_table_[symbol_id].prob))); - int32_t fix = probability_table_[symbol_id].prob - new_prob; - if (fix == 0u) { - fix = 1; - } - if (fix >= static_cast(probability_table_[symbol_id].prob)) { - fix = probability_table_[symbol_id].prob - 1; - } - if (fix > error) { - fix = error; - } - probability_table_[symbol_id].prob -= fix; - total_rans_prob -= fix; - error -= fix; - if (total_rans_prob == rans_precision_) { - break; - } - } - } - } - } - - // Compute the cumulative probability (cdf). - uint32_t total_prob = 0; - for (int i = 0; i < num_symbols; ++i) { - probability_table_[i].cum_prob = total_prob; - total_prob += probability_table_[i].prob; - } - if (total_prob != rans_precision_) { - return false; - } - - // Estimate the number of bits needed to encode the input. - // From Shannon entropy the total number of bits N is: - // N = -sum{i : all_symbols}(F(i) * log2(P(i))) - // where P(i) is the normalized probability of symbol i and F(i) is the - // symbol's frequency in the input data. - double num_bits = 0; - for (int i = 0; i < num_symbols; ++i) { - if (probability_table_[i].prob == 0) { - continue; - } - const double norm_prob = - static_cast(probability_table_[i].prob) / rans_precision_d; - num_bits += static_cast(frequencies[i]) * log2(norm_prob); - } - num_expected_bits_ = static_cast(ceil(-num_bits)); - if (!EncodeTable(buffer)) { - return false; - } - return true; -} - -template -bool RAnsSymbolEncoder::EncodeTable( - EncoderBuffer *buffer) { - EncodeVarint(num_symbols_, buffer); - // Use varint encoding for the probabilities (first two bits represent the - // number of bytes used - 1). - for (uint32_t i = 0; i < num_symbols_; ++i) { - const uint32_t prob = probability_table_[i].prob; - int num_extra_bytes = 0; - if (prob >= (1 << 6)) { - num_extra_bytes++; - if (prob >= (1 << 14)) { - num_extra_bytes++; - if (prob >= (1 << 22)) { - // The maximum number of precision bits is 20 so we should not really - // get to this point. - return false; - } - } - } - if (prob == 0) { - // When the probability of the symbol is 0, set the first two bits to 1 - // (unique identifier) and use the remaining 6 bits to store the offset - // to the next symbol with non-zero probability. - uint32_t offset = 0; - for (; offset < (1 << 6) - 1; ++offset) { - // Note: we don't have to check whether the next symbol id is larger - // than num_symbols_ because we know that the last symbol always has - // non-zero probability. - const uint32_t next_prob = probability_table_[i + offset + 1].prob; - if (next_prob > 0) { - break; - } - } - buffer->Encode(static_cast((offset << 2) | 3)); - i += offset; - } else { - // Encode the first byte (including the number of extra bytes). - buffer->Encode(static_cast((prob << 2) | (num_extra_bytes & 3))); - // Encode the extra bytes. - for (int b = 0; b < num_extra_bytes; ++b) { - buffer->Encode(static_cast(prob >> (8 * (b + 1) - 2))); - } - } - } - return true; -} - -template -void RAnsSymbolEncoder::StartEncoding( - EncoderBuffer *buffer) { - // Allocate extra storage just in case. - const uint64_t required_bits = 2 * num_expected_bits_ + 32; - - buffer_offset_ = buffer->size(); - const int64_t required_bytes = (required_bits + 7) / 8; - buffer->Resize(buffer_offset_ + required_bytes + sizeof(buffer_offset_)); - uint8_t *const data = - reinterpret_cast(const_cast(buffer->data())); - ans_.write_init(data + buffer_offset_); -} - -template -void RAnsSymbolEncoder::EndEncoding( - EncoderBuffer *buffer) { - char *const src = const_cast(buffer->data()) + buffer_offset_; - - // TODO(fgalligan): Look into changing this to uint32_t as write_end() - // returns an int. - const uint64_t bytes_written = static_cast(ans_.write_end()); - EncoderBuffer var_size_buffer; - EncodeVarint(bytes_written, &var_size_buffer); - const uint32_t size_len = static_cast(var_size_buffer.size()); - char *const dst = src + size_len; - memmove(dst, src, bytes_written); - - // Store the size of the encoded data. - memcpy(src, var_size_buffer.data(), size_len); - - // Resize the buffer to match the number of encoded bytes. - buffer->Resize(buffer_offset_ + bytes_written + size_len); -} - -} // namespace draco - -#endif // DRACO_COMPRESSION_ENTROPY_RANS_SYMBOL_ENCODER_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy.cc b/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy.cc deleted file mode 100644 index 137eafe..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy.cc +++ /dev/null @@ -1,147 +0,0 @@ -#include "draco/compression/entropy/shannon_entropy.h" - -#include -#include - -#include "draco/compression/entropy/rans_symbol_coding.h" - -namespace draco { - -int64_t ComputeShannonEntropy(const uint32_t *symbols, int num_symbols, - int max_value, int *out_num_unique_symbols) { - // First find frequency of all unique symbols in the input array. - int num_unique_symbols = 0; - std::vector symbol_frequencies(max_value + 1, 0); - for (int i = 0; i < num_symbols; ++i) { - ++symbol_frequencies[symbols[i]]; - } - double total_bits = 0; - double num_symbols_d = num_symbols; - for (int i = 0; i < max_value + 1; ++i) { - if (symbol_frequencies[i] > 0) { - ++num_unique_symbols; - // Compute Shannon entropy for the symbol. - // We don't want to use std::log2 here for Android build. - total_bits += - symbol_frequencies[i] * - log2(static_cast(symbol_frequencies[i]) / num_symbols_d); - } - } - if (out_num_unique_symbols) { - *out_num_unique_symbols = num_unique_symbols; - } - // Entropy is always negative. - return static_cast(-total_bits); -} - -double ComputeBinaryShannonEntropy(uint32_t num_values, - uint32_t num_true_values) { - if (num_values == 0) { - return 0; - } - - // We can exit early if the data set has 0 entropy. - if (num_true_values == 0 || num_values == num_true_values) { - return 0; - } - const double true_freq = - static_cast(num_true_values) / static_cast(num_values); - const double false_freq = 1.0 - true_freq; - return -(true_freq * std::log2(true_freq) + - false_freq * std::log2(false_freq)); -} - -ShannonEntropyTracker::ShannonEntropyTracker() {} - -ShannonEntropyTracker::EntropyData ShannonEntropyTracker::Peek( - const uint32_t *symbols, int num_symbols) { - return UpdateSymbols(symbols, num_symbols, false); -} - -ShannonEntropyTracker::EntropyData ShannonEntropyTracker::Push( - const uint32_t *symbols, int num_symbols) { - return UpdateSymbols(symbols, num_symbols, true); -} - -ShannonEntropyTracker::EntropyData ShannonEntropyTracker::UpdateSymbols( - const uint32_t *symbols, int num_symbols, bool push_changes) { - EntropyData ret_data = entropy_data_; - ret_data.num_values += num_symbols; - for (int i = 0; i < num_symbols; ++i) { - const uint32_t symbol = symbols[i]; - if (frequencies_.size() <= symbol) { - frequencies_.resize(symbol + 1, 0); - } - - // Update the entropy of the stream. Note that entropy of |N| values - // represented by |S| unique symbols is defined as: - // - // entropy = -sum_over_S(symbol_frequency / N * log2(symbol_frequency / N)) - // - // To avoid the need to recompute the entire sum when new values are added, - // we can instead update a so called entropy norm that is defined as: - // - // entropy_norm = sum_over_S(symbol_frequency * log2(symbol_frequency)) - // - // In this case, all we need to do is update entries on the symbols where - // the frequency actually changed. - // - // Note that entropy_norm and entropy can be easily transformed to the - // actual entropy as: - // - // entropy = log2(N) - entropy_norm / N - // - double old_symbol_entropy_norm = 0; - int &frequency = frequencies_[symbol]; - if (frequency > 1) { - old_symbol_entropy_norm = frequency * std::log2(frequency); - } else if (frequency == 0) { - ret_data.num_unique_symbols++; - if (symbol > static_cast(ret_data.max_symbol)) { - ret_data.max_symbol = symbol; - } - } - frequency++; - const double new_symbol_entropy_norm = frequency * std::log2(frequency); - - // Update the final entropy. - ret_data.entropy_norm += new_symbol_entropy_norm - old_symbol_entropy_norm; - } - if (push_changes) { - // Update entropy data of the stream. - entropy_data_ = ret_data; - } else { - // We are only peeking so do not update the stream. - // Revert changes in the frequency table. - for (int i = 0; i < num_symbols; ++i) { - const uint32_t symbol = symbols[i]; - frequencies_[symbol]--; - } - } - return ret_data; -} - -int64_t ShannonEntropyTracker::GetNumberOfDataBits( - const EntropyData &entropy_data) { - if (entropy_data.num_values < 2) { - return 0; - } - // We need to compute the number of bits required to represent the stream - // using the entropy norm. Note that: - // - // entropy = log2(num_values) - entropy_norm / num_values - // - // and number of bits required for the entropy is: num_values * entropy - // - return static_cast( - ceil(entropy_data.num_values * std::log2(entropy_data.num_values) - - entropy_data.entropy_norm)); -} - -int64_t ShannonEntropyTracker::GetNumberOfRAnsTableBits( - const EntropyData &entropy_data) { - return ApproximateRAnsFrequencyTableBits(entropy_data.max_symbol + 1, - entropy_data.num_unique_symbols); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy.h b/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy.h deleted file mode 100644 index 85165f4..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_COMPRESSION_ENTROPY_SHANNON_ENTROPY_H_ -#define DRACO_COMPRESSION_ENTROPY_SHANNON_ENTROPY_H_ - -#include - -#include - -namespace draco { - -// Computes an approximate Shannon entropy of symbols stored in the provided -// input array |symbols|. The entropy corresponds to the number of bits that is -// required to represent/store all the symbols using an optimal entropy coding -// algorithm. See for example "A mathematical theory of communication" by -// Shannon'48 (http://ieeexplore.ieee.org/document/6773024/). -// -// |max_value| is a required input that define the maximum value in the input -// |symbols| array. -// -// |out_num_unique_symbols| is an optional output argument that stores the -// number of unique symbols contained within the |symbols| array. -// TODO(ostava): This should be renamed or the return value should be changed to -// return the actual entropy and not the number of bits needed to represent the -// input symbols. -int64_t ComputeShannonEntropy(const uint32_t *symbols, int num_symbols, - int max_value, int *out_num_unique_symbols); - -// Computes the Shannon entropy of |num_values| Boolean entries, where -// |num_true_values| are set to true. -// Returns entropy between 0-1. -double ComputeBinaryShannonEntropy(uint32_t num_values, - uint32_t num_true_values); - -// Class that can be used to keep track of the Shannon entropy on streamed data. -// As new symbols are pushed to the tracker, the entropy is automatically -// recomputed. The class also support recomputing the entropy without actually -// pushing the symbols to the tracker through the Peek() method. -class ShannonEntropyTracker { - public: - ShannonEntropyTracker(); - - // Struct for holding entropy data about the symbols added to the tracker. - // It can be used to compute the number of bits needed to store the data using - // the method: - // ShannonEntropyTracker::GetNumberOfDataBits(entropy_data); - // or to compute the approximate size of the frequency table needed by the - // rans coding using method: - // ShannonEntropyTracker::GetNumberOfRAnsTableBits(entropy_data); - struct EntropyData { - double entropy_norm; - int num_values; - int max_symbol; - int num_unique_symbols; - EntropyData() - : entropy_norm(0.0), - num_values(0), - max_symbol(0), - num_unique_symbols(0) {} - }; - - // Adds new symbols to the tracker and recomputes the entropy accordingly. - EntropyData Push(const uint32_t *symbols, int num_symbols); - - // Returns new entropy data for the tracker as if |symbols| were added to the - // tracker without actually changing the status of the tracker. - EntropyData Peek(const uint32_t *symbols, int num_symbols); - - // Gets the number of bits needed for encoding symbols added to the tracker. - int64_t GetNumberOfDataBits() const { - return GetNumberOfDataBits(entropy_data_); - } - - // Gets the number of bits needed for encoding frequency table using the rans - // encoder. - int64_t GetNumberOfRAnsTableBits() const { - return GetNumberOfRAnsTableBits(entropy_data_); - } - - // Gets the number of bits needed for encoding given |entropy_data|. - static int64_t GetNumberOfDataBits(const EntropyData &entropy_data); - - // Gets the number of bits needed for encoding frequency table using the rans - // encoder for the given |entropy_data|. - static int64_t GetNumberOfRAnsTableBits(const EntropyData &entropy_data); - - private: - EntropyData UpdateSymbols(const uint32_t *symbols, int num_symbols, - bool push_changes); - - std::vector frequencies_; - - EntropyData entropy_data_; -}; - -} // namespace draco - -#endif // DRACO_COMPRESSION_ENTROPY_SHANNON_ENTROPY_H_ diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy_test.cc b/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy_test.cc deleted file mode 100644 index 732c7d2..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/shannon_entropy_test.cc +++ /dev/null @@ -1,58 +0,0 @@ -#include "draco/compression/entropy/shannon_entropy.h" - -#include "draco/core/draco_test_base.h" - -namespace { - -TEST(ShannonEntropyTest, TestBinaryEntropy) { - // Test verifies that computing binary entropy works as expected. - ASSERT_EQ(draco::ComputeBinaryShannonEntropy(0, 0), 0); - ASSERT_EQ(draco::ComputeBinaryShannonEntropy(10, 0), 0); - ASSERT_EQ(draco::ComputeBinaryShannonEntropy(10, 10), 0); - ASSERT_NEAR(draco::ComputeBinaryShannonEntropy(10, 5), 1.0, 1e-4); -} - -TEST(ShannonEntropyTest, TestStreamEntropy) { - // Test verifies that the entropy of streamed data is computed correctly. - const std::vector symbols = {1, 5, 1, 100, 2, 1}; - - draco::ShannonEntropyTracker entropy_tracker; - - // Nothing added, 0 entropy. - ASSERT_EQ(entropy_tracker.GetNumberOfDataBits(), 0); - - // Try to push symbols one by one. - uint32_t max_symbol = 0; - for (int i = 0; i < symbols.size(); ++i) { - if (symbols[i] > max_symbol) { - max_symbol = symbols[i]; - } - const auto entropy_data = entropy_tracker.Push(&symbols[i], 1); - - const int64_t stream_entropy_bits = entropy_tracker.GetNumberOfDataBits(); - // Ensure the returned entropy_data is in sync with the stream. - ASSERT_EQ(draco::ShannonEntropyTracker::GetNumberOfDataBits(entropy_data), - stream_entropy_bits); - - // Make sure the entropy is approximately the same as the one we compute - // directly from all symbols. - const int64_t expected_entropy_bits = draco::ComputeShannonEntropy( - symbols.data(), i + 1, max_symbol, nullptr); - - // For now hardcoded tolerance of 2 bits. - ASSERT_NEAR(expected_entropy_bits, stream_entropy_bits, 2); - } - - // Compare it also to the case when we add all symbols in one call. - draco::ShannonEntropyTracker entropy_tracker_2; - entropy_tracker_2.Push(symbols.data(), symbols.size()); - const int64_t stream_2_entropy_bits = entropy_tracker_2.GetNumberOfDataBits(); - ASSERT_EQ(entropy_tracker.GetNumberOfDataBits(), stream_2_entropy_bits); - - // Ensure that peeking does not change the entropy. - entropy_tracker_2.Peek(symbols.data(), 1); - - ASSERT_EQ(stream_2_entropy_bits, entropy_tracker_2.GetNumberOfDataBits()); -} - -} // namespace diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_coding_test.cc b/libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_coding_test.cc deleted file mode 100644 index ba7166b..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_coding_test.cc +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/config/compression_shared.h" -#include "draco/compression/entropy/symbol_decoding.h" -#include "draco/compression/entropy/symbol_encoding.h" -#include "draco/core/bit_utils.h" -#include "draco/core/decoder_buffer.h" -#include "draco/core/draco_test_base.h" -#include "draco/core/encoder_buffer.h" - -namespace draco { - -class SymbolCodingTest : public ::testing::Test { - protected: - SymbolCodingTest() : bitstream_version_(kDracoMeshBitstreamVersion) {} - - template - void TestConvertToSymbolAndBack(SignedIntTypeT x) { - typedef typename std::make_unsigned::type Symbol; - Symbol symbol = ConvertSignedIntToSymbol(x); - SignedIntTypeT y = ConvertSymbolToSignedInt(symbol); - ASSERT_EQ(x, y); - } - - uint16_t bitstream_version_; -}; - -TEST_F(SymbolCodingTest, TestLargeNumbers) { - // This test verifies that SymbolCoding successfully encodes an array of large - // numbers. - const uint32_t in[] = {12345678, 1223333, 111, 5}; - const int num_values = sizeof(in) / sizeof(uint32_t); - EncoderBuffer eb; - ASSERT_TRUE(EncodeSymbols(in, num_values, 1, nullptr, &eb)); - - std::vector out; - out.resize(num_values); - DecoderBuffer db; - db.Init(eb.data(), eb.size()); - db.set_bitstream_version(bitstream_version_); - ASSERT_TRUE(DecodeSymbols(num_values, 1, &db, &out[0])); - for (int i = 0; i < num_values; ++i) { - EXPECT_EQ(in[i], out[i]); - } -} - -TEST_F(SymbolCodingTest, TestManyNumbers) { - // This test verifies that SymbolCoding successfully encodes an array of - // several numbers that repeat many times. - - // Value/frequency pairs. - const std::pair in[] = { - {12, 1500}, {1025, 31000}, {7, 1}, {9, 5}, {0, 6432}}; - - const int num_pairs = sizeof(in) / sizeof(std::pair); - - std::vector in_values; - for (int i = 0; i < num_pairs; ++i) { - in_values.insert(in_values.end(), in[i].second, in[i].first); - } - for (int method = 0; method < NUM_SYMBOL_CODING_METHODS; ++method) { - // Test the encoding using all available symbol coding methods. - Options options; - SetSymbolEncodingMethod(&options, static_cast(method)); - - EncoderBuffer eb; - ASSERT_TRUE( - EncodeSymbols(in_values.data(), in_values.size(), 1, &options, &eb)); - std::vector out_values; - out_values.resize(in_values.size()); - DecoderBuffer db; - db.Init(eb.data(), eb.size()); - db.set_bitstream_version(bitstream_version_); - ASSERT_TRUE(DecodeSymbols(in_values.size(), 1, &db, &out_values[0])); - for (uint32_t i = 0; i < in_values.size(); ++i) { - ASSERT_EQ(in_values[i], out_values[i]); - } - } -} - -TEST_F(SymbolCodingTest, TestEmpty) { - // This test verifies that SymbolCoding successfully encodes an empty array. - EncoderBuffer eb; - ASSERT_TRUE(EncodeSymbols(nullptr, 0, 1, nullptr, &eb)); - DecoderBuffer db; - db.Init(eb.data(), eb.size()); - db.set_bitstream_version(bitstream_version_); - ASSERT_TRUE(DecodeSymbols(0, 1, &db, nullptr)); -} - -TEST_F(SymbolCodingTest, TestOneSymbol) { - // This test verifies that SymbolCoding successfully encodes an a single - // symbol. - EncoderBuffer eb; - const std::vector in(1200, 0); - ASSERT_TRUE(EncodeSymbols(in.data(), in.size(), 1, nullptr, &eb)); - - std::vector out(in.size()); - DecoderBuffer db; - db.Init(eb.data(), eb.size()); - db.set_bitstream_version(bitstream_version_); - ASSERT_TRUE(DecodeSymbols(in.size(), 1, &db, &out[0])); - for (uint32_t i = 0; i < in.size(); ++i) { - ASSERT_EQ(in[i], out[i]); - } -} - -TEST_F(SymbolCodingTest, TestBitLengths) { - // This test verifies that SymbolCoding successfully encodes symbols of - // various bit lengths - EncoderBuffer eb; - std::vector in; - constexpr int bit_lengths = 18; - for (int i = 0; i < bit_lengths; ++i) { - in.push_back(1 << i); - } - std::vector out(in.size()); - for (int i = 0; i < bit_lengths; ++i) { - eb.Clear(); - ASSERT_TRUE(EncodeSymbols(in.data(), i + 1, 1, nullptr, &eb)); - DecoderBuffer db; - db.Init(eb.data(), eb.size()); - db.set_bitstream_version(bitstream_version_); - ASSERT_TRUE(DecodeSymbols(i + 1, 1, &db, &out[0])); - for (int j = 0; j < i + 1; ++j) { - ASSERT_EQ(in[j], out[j]); - } - } -} - -TEST_F(SymbolCodingTest, TestLargeNumberCondition) { - // This test verifies that SymbolCoding successfully encodes large symbols - // that are on the boundary between raw scheme and tagged scheme (18 bits). - EncoderBuffer eb; - constexpr int num_symbols = 1000000; - const std::vector in(num_symbols, 1 << 18); - ASSERT_TRUE(EncodeSymbols(in.data(), in.size(), 1, nullptr, &eb)); - - std::vector out(in.size()); - DecoderBuffer db; - db.Init(eb.data(), eb.size()); - db.set_bitstream_version(bitstream_version_); - ASSERT_TRUE(DecodeSymbols(in.size(), 1, &db, &out[0])); - for (uint32_t i = 0; i < in.size(); ++i) { - ASSERT_EQ(in[i], out[i]); - } -} - -TEST_F(SymbolCodingTest, TestConversionFullRange) { - TestConvertToSymbolAndBack(static_cast(-128)); - TestConvertToSymbolAndBack(static_cast(-127)); - TestConvertToSymbolAndBack(static_cast(-1)); - TestConvertToSymbolAndBack(static_cast(0)); - TestConvertToSymbolAndBack(static_cast(1)); - TestConvertToSymbolAndBack(static_cast(127)); -} - -} // namespace draco diff --git a/libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_decoding.cc b/libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_decoding.cc deleted file mode 100644 index 93d2997..0000000 --- a/libs/assimp/contrib/draco/src/draco/compression/entropy/symbol_decoding.cc +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/compression/entropy/symbol_decoding.h" - -#include -#include - -#include "draco/compression/entropy/rans_symbol_decoder.h" - -namespace draco { - -template