Update snapshot to 1.3.4

This commit is contained in:
Frank Galligan 2018-08-17 12:01:27 -07:00
parent c93f5074c5
commit 063994c362
207 changed files with 3035 additions and 2992 deletions

View File

@ -42,6 +42,7 @@ option(ENABLE_WERROR "" OFF)
option(ENABLE_WEXTRA "" OFF) option(ENABLE_WEXTRA "" OFF)
option(IGNORE_EMPTY_BUILD_TYPE "" OFF) option(IGNORE_EMPTY_BUILD_TYPE "" OFF)
option(BUILD_UNITY_PLUGIN "Build plugin library for Unity" OFF) option(BUILD_UNITY_PLUGIN "Build plugin library for Unity" OFF)
option(BUILD_ANIMATION_ENCODING "" OFF)
option(BUILD_FOR_GLTF "" OFF) option(BUILD_FOR_GLTF "" OFF)
option(BUILD_MAYA_PLUGIN "Build plugin library for Maya" OFF) option(BUILD_MAYA_PLUGIN "Build plugin library for Maya" OFF)
@ -121,12 +122,12 @@ if (BUILD_MAYA_PLUGIN)
endif () endif ()
if (ENABLE_EXTRA_SPEED) if (ENABLE_EXTRA_SPEED)
if(MSVC) if (MSVC)
# Maximum optimization in Release mode. # Maximum optimization in Release mode.
add_compile_options("$<$<CONFIG:RELEASE>:/Ox>") add_compile_options("$<$<CONFIG:RELEASE>:/Ox>")
else() else ()
add_compiler_flag_if_supported("-O3") add_compiler_flag_if_supported("-O3")
endif() endif ()
endif () endif ()
# Generate a version file containing repository info. # Generate a version file containing repository info.
@ -240,7 +241,6 @@ set(draco_compression_attributes_dec_sources
"${draco_src_root}/compression/attributes/kd_tree_attributes_decoder.h" "${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/kd_tree_attributes_shared.h"
"${draco_src_root}/compression/attributes/mesh_attribute_indices_encoding_data.h" "${draco_src_root}/compression/attributes/mesh_attribute_indices_encoding_data.h"
"${draco_src_root}/compression/attributes/mesh_traversal_sequencer.h"
"${draco_src_root}/compression/attributes/normal_compression_utils.h" "${draco_src_root}/compression/attributes/normal_compression_utils.h"
"${draco_src_root}/compression/attributes/point_d_vector.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.cc"
@ -260,7 +260,6 @@ set(draco_compression_attributes_enc_sources
"${draco_src_root}/compression/attributes/kd_tree_attributes_encoder.cc" "${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/kd_tree_attributes_encoder.h"
"${draco_src_root}/compression/attributes/linear_sequencer.h" "${draco_src_root}/compression/attributes/linear_sequencer.h"
"${draco_src_root}/compression/attributes/mesh_attribute_indices_encoding_observer.h"
"${draco_src_root}/compression/attributes/points_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.cc"
"${draco_src_root}/compression/attributes/sequential_attribute_encoder.h" "${draco_src_root}/compression/attributes/sequential_attribute_encoder.h"
@ -330,6 +329,27 @@ set(draco_compression_attributes_pred_schemes_enc_sources
"${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.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") "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h")
set(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")
set(draco_enc_config_sources set(draco_enc_config_sources
"${draco_src_root}/compression/config/compression_shared.h" "${draco_src_root}/compression/config/compression_shared.h"
"${draco_src_root}/compression/config/draco_options.h" "${draco_src_root}/compression/config/draco_options.h"
@ -352,6 +372,14 @@ set(draco_compression_encode_sources
"${draco_src_root}/compression/expert_encode.cc" "${draco_src_root}/compression/expert_encode.cc"
"${draco_src_root}/compression/expert_encode.h") "${draco_src_root}/compression/expert_encode.h")
set(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")
set(draco_compression_mesh_dec_sources set(draco_compression_mesh_dec_sources
"${draco_src_root}/compression/mesh/mesh_decoder.cc" "${draco_src_root}/compression/mesh/mesh_decoder.cc"
"${draco_src_root}/compression/mesh/mesh_decoder.h" "${draco_src_root}/compression/mesh/mesh_decoder.h"
@ -400,9 +428,23 @@ set(draco_compression_point_cloud_enc_sources
"${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.cc" "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.cc"
"${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.h") "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.h")
set(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")
set(draco_core_sources set(draco_core_sources
"${draco_src_root}/core/ans.h" "${draco_src_root}/core/bit_utils.cc"
"${draco_src_root}/core/bit_utils.h" "${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.cc"
"${draco_src_root}/core/cycle_timer.h" "${draco_src_root}/core/cycle_timer.h"
"${draco_src_root}/core/data_buffer.cc" "${draco_src_root}/core/data_buffer.cc"
@ -425,44 +467,12 @@ set(draco_core_sources
"${draco_src_root}/core/options.h" "${draco_src_root}/core/options.h"
"${draco_src_root}/core/quantization_utils.cc" "${draco_src_root}/core/quantization_utils.cc"
"${draco_src_root}/core/quantization_utils.h" "${draco_src_root}/core/quantization_utils.h"
"${draco_src_root}/core/rans_symbol_coding.h"
"${draco_src_root}/core/rans_symbol_decoder.h"
"${draco_src_root}/core/rans_symbol_encoder.h"
"${draco_src_root}/core/shannon_entropy.cc"
"${draco_src_root}/core/shannon_entropy.h"
"${draco_src_root}/core/status.h" "${draco_src_root}/core/status.h"
"${draco_src_root}/core/statusor.h" "${draco_src_root}/core/statusor.h"
"${draco_src_root}/core/symbol_coding_utils.cc"
"${draco_src_root}/core/symbol_coding_utils.h"
"${draco_src_root}/core/symbol_decoding.cc"
"${draco_src_root}/core/symbol_decoding.h"
"${draco_src_root}/core/symbol_encoding.cc"
"${draco_src_root}/core/symbol_encoding.h"
"${draco_src_root}/core/varint_decoding.h" "${draco_src_root}/core/varint_decoding.h"
"${draco_src_root}/core/varint_encoding.h" "${draco_src_root}/core/varint_encoding.h"
"${draco_src_root}/core/vector_d.h") "${draco_src_root}/core/vector_d.h")
set(draco_core_bit_coders_sources
"${draco_src_root}/core/bit_coders/adaptive_rans_bit_coding_shared.h"
"${draco_src_root}/core/bit_coders/adaptive_rans_bit_decoder.cc"
"${draco_src_root}/core/bit_coders/adaptive_rans_bit_decoder.h"
"${draco_src_root}/core/bit_coders/adaptive_rans_bit_encoder.cc"
"${draco_src_root}/core/bit_coders/adaptive_rans_bit_encoder.h"
"${draco_src_root}/core/bit_coders/direct_bit_decoder.cc"
"${draco_src_root}/core/bit_coders/direct_bit_decoder.h"
"${draco_src_root}/core/bit_coders/direct_bit_encoder.cc"
"${draco_src_root}/core/bit_coders/direct_bit_encoder.h"
"${draco_src_root}/core/bit_coders/folded_integer_bit_decoder.h"
"${draco_src_root}/core/bit_coders/folded_integer_bit_encoder.h"
"${draco_src_root}/core/bit_coders/rans_bit_decoder.cc"
"${draco_src_root}/core/bit_coders/rans_bit_decoder.h"
"${draco_src_root}/core/bit_coders/rans_bit_encoder.cc"
"${draco_src_root}/core/bit_coders/rans_bit_encoder.h"
"${draco_src_root}/core/bit_coders/symbol_bit_decoder.cc"
"${draco_src_root}/core/bit_coders/symbol_bit_decoder.h"
"${draco_src_root}/core/bit_coders/symbol_bit_encoder.cc"
"${draco_src_root}/core/bit_coders/symbol_bit_encoder.h")
set(draco_io_sources set(draco_io_sources
"${draco_src_root}/io/mesh_io.cc" "${draco_src_root}/io/mesh_io.cc"
"${draco_src_root}/io/mesh_io.h" "${draco_src_root}/io/mesh_io.h"
@ -487,9 +497,6 @@ set(draco_mesh_sources
"${draco_src_root}/mesh/corner_table.cc" "${draco_src_root}/mesh/corner_table.cc"
"${draco_src_root}/mesh/corner_table.h" "${draco_src_root}/mesh/corner_table.h"
"${draco_src_root}/mesh/corner_table_iterators.h" "${draco_src_root}/mesh/corner_table_iterators.h"
"${draco_src_root}/mesh/corner_table_traversal_processor.h"
"${draco_src_root}/mesh/edgebreaker_observer.h"
"${draco_src_root}/mesh/edgebreaker_traverser.h"
"${draco_src_root}/mesh/mesh.cc" "${draco_src_root}/mesh/mesh.cc"
"${draco_src_root}/mesh/mesh.h" "${draco_src_root}/mesh/mesh.h"
"${draco_src_root}/mesh/mesh_are_equivalent.cc" "${draco_src_root}/mesh/mesh_are_equivalent.cc"
@ -544,6 +551,17 @@ set(draco_metadata_dec_sources
"${draco_src_root}/metadata/metadata_decoder.cc" "${draco_src_root}/metadata/metadata_decoder.cc"
"${draco_src_root}/metadata/metadata_decoder.h") "${draco_src_root}/metadata/metadata_decoder.h")
set(draco_animation_sources
"${draco_src_root}/animation/keyframe_animation.cc"
"${draco_src_root}/animation/keyframe_animation.h")
set(draco_animation_enc_sources
"${draco_src_root}/animation/keyframe_animation_encoder.cc"
"${draco_src_root}/animation/keyframe_animation_encoder.h")
set(draco_animation_dec_sources
"${draco_src_root}/animation/keyframe_animation_decoder.cc"
"${draco_src_root}/animation/keyframe_animation_decoder.h")
set(draco_js_dec_sources set(draco_js_dec_sources
"${draco_src_root}/javascript/emscripten/decoder_webidl_wrapper.cc" "${draco_src_root}/javascript/emscripten/decoder_webidl_wrapper.cc"
@ -553,20 +571,31 @@ set(draco_js_enc_sources
"${draco_src_root}/javascript/emscripten/draco_encoder_glue_wrapper.cc" "${draco_src_root}/javascript/emscripten/draco_encoder_glue_wrapper.cc"
"${draco_src_root}/javascript/emscripten/encoder_webidl_wrapper.cc") "${draco_src_root}/javascript/emscripten/encoder_webidl_wrapper.cc")
set(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")
set(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")
set(draco_test_sources set(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}/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_canonicalized_transform_test.cc"
"${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc" "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc"
"${draco_src_root}/compression/attributes/point_d_vector_test.cc"
"${draco_src_root}/compression/attributes/sequential_integer_attribute_encoding_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/decode_test.cc"
"${draco_src_root}/compression/encode_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_edgebreaker_encoding_test.cc"
"${draco_src_root}/compression/mesh/mesh_encoder_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_kd_tree_encoding_test.cc"
"${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoding_test.cc" "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoding_test.cc"
"${draco_src_root}/core/bit_coders/rans_coding_test.cc"
"${draco_src_root}/core/buffer_bit_coding_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_base.h"
"${draco_src_root}/core/draco_test_utils.cc" "${draco_src_root}/core/draco_test_utils.cc"
@ -574,9 +603,7 @@ set(draco_test_sources
"${draco_src_root}/core/draco_tests.cc" "${draco_src_root}/core/draco_tests.cc"
"${draco_src_root}/core/math_utils_test.cc" "${draco_src_root}/core/math_utils_test.cc"
"${draco_src_root}/core/quantization_utils_test.cc" "${draco_src_root}/core/quantization_utils_test.cc"
"${draco_src_root}/core/shannon_entropy_test.cc"
"${draco_src_root}/core/status_test.cc" "${draco_src_root}/core/status_test.cc"
"${draco_src_root}/core/symbol_coding_test.cc"
"${draco_src_root}/core/vector_d_test.cc" "${draco_src_root}/core/vector_d_test.cc"
"${draco_src_root}/io/obj_decoder_test.cc" "${draco_src_root}/io/obj_decoder_test.cc"
"${draco_src_root}/io/obj_encoder_test.cc" "${draco_src_root}/io/obj_encoder_test.cc"
@ -636,6 +663,10 @@ if (EMSCRIPTEN AND ENABLE_JS_GLUE)
"${draco_src_root}/javascript/emscripten/draco_web_decoder.idl") "${draco_src_root}/javascript/emscripten/draco_web_decoder.idl")
set(draco_js_enc_idl set(draco_js_enc_idl
"${draco_src_root}/javascript/emscripten/draco_web_encoder.idl") "${draco_src_root}/javascript/emscripten/draco_web_encoder.idl")
set(draco_animation_js_dec_idl
"${draco_src_root}/javascript/emscripten/draco_animation_web_decoder.idl")
set(draco_animation_js_enc_idl
"${draco_src_root}/javascript/emscripten/draco_animation_web_encoder.idl")
# Generate ${draco_build_dir}/glue_decoder.cpp at cmake generation time so it # Generate ${draco_build_dir}/glue_decoder.cpp at cmake generation time so it
# can be added to targets without cmake reporting errors. # can be added to targets without cmake reporting errors.
@ -654,6 +685,20 @@ if (EMSCRIPTEN AND ENABLE_JS_GLUE)
message(FATAL_ERROR "Glue generation failed.") message(FATAL_ERROR "Glue generation failed.")
endif () endif ()
if (BUILD_ANIMATION_ENCODING)
execute_process(COMMAND ${PYTHON_EXECUTABLE}
$ENV{EMSCRIPTEN}/tools/webidl_binder.py
${draco_animation_js_dec_idl}
${draco_build_dir}/glue_animation_decoder)
execute_process(COMMAND ${PYTHON_EXECUTABLE}
$ENV{EMSCRIPTEN}/tools/webidl_binder.py
${draco_animation_js_enc_idl}
${draco_build_dir}/glue_animation_encoder)
if (NOT EXISTS "${draco_build_dir}/glue_animation_decoder.cpp" OR
NOT EXISTS "${draco_build_dir}/glue_animation_encoder.cpp")
message(FATAL_ERROR "Animation glue generation failed.")
endif()
endif()
# Add a custom rule depending on the IDL to regenerate # Add a custom rule depending on the IDL to regenerate
# ${draco_build_dir}/glue_decoder.cpp as needed. # ${draco_build_dir}/glue_decoder.cpp as needed.
@ -677,16 +722,38 @@ if (EMSCRIPTEN AND ENABLE_JS_GLUE)
WORKING_DIRECTORY ${draco_build_dir} WORKING_DIRECTORY ${draco_build_dir}
VERBATIM) VERBATIM)
if (BUILD_ANIMATION_ENCODING)
add_custom_command(OUTPUT ${draco_build_dir}/glue_animation_decoder.cpp
COMMAND ${PYTHON_EXECUTABLE}
$ENV{EMSCRIPTEN}/tools/webidl_binder.py
${draco_animation_js_dec_idl}
${draco_build_dir}/glue_animation_decoder
DEPENDS ${draco_animation_js_dec_idl}
COMMENT "Generating ${draco_build_dir}/glue_animation_decoder.cpp."
WORKING_DIRECTORY ${draco_build_dir}
VERBATIM)
add_custom_command(OUTPUT ${draco_build_dir}/glue_animation_encoder.cpp
COMMAND ${PYTHON_EXECUTABLE}
$ENV{EMSCRIPTEN}/tools/webidl_binder.py
${draco_animation_js_enc_idl}
${draco_build_dir}/glue_animation_encoder
DEPENDS ${draco_animation_js_enc_idl}
COMMENT "Generating ${draco_build_dir}/glue_animation_encoder.cpp."
WORKING_DIRECTORY ${draco_build_dir}
VERBATIM)
endif()
set(draco_decoder_src set(draco_decoder_src
${draco_attributes_sources} ${draco_attributes_sources}
${draco_compression_attributes_dec_sources} ${draco_compression_attributes_dec_sources}
${draco_compression_attributes_pred_schemes_dec_sources} ${draco_compression_attributes_pred_schemes_dec_sources}
${draco_compression_bit_coders_sources}
${draco_compression_decode_sources} ${draco_compression_decode_sources}
${draco_compression_entropy_sources}
${draco_compression_mesh_traverser_sources}
${draco_compression_mesh_dec_sources} ${draco_compression_mesh_dec_sources}
${draco_compression_point_cloud_dec_sources} ${draco_compression_point_cloud_dec_sources}
${draco_core_sources} ${draco_core_sources}
${draco_core_bit_coders_sources}
${draco_dec_config_sources} ${draco_dec_config_sources}
${draco_io_sources} ${draco_io_sources}
${draco_mesh_sources} ${draco_mesh_sources}
@ -695,15 +762,18 @@ if (EMSCRIPTEN AND ENABLE_JS_GLUE)
${draco_point_cloud_sources} ${draco_point_cloud_sources}
${draco_points_dec_sources} ${draco_points_dec_sources}
${draco_version_sources}) ${draco_version_sources})
set(draco_encoder_src set(draco_encoder_src
${draco_attributes_sources} ${draco_attributes_sources}
${draco_compression_attributes_enc_sources} ${draco_compression_attributes_enc_sources}
${draco_compression_attributes_pred_schemes_enc_sources} ${draco_compression_attributes_pred_schemes_enc_sources}
${draco_compression_bit_coders_sources}
${draco_compression_encode_sources} ${draco_compression_encode_sources}
${draco_compression_entropy_sources}
${draco_compression_mesh_traverser_sources}
${draco_compression_mesh_enc_sources} ${draco_compression_mesh_enc_sources}
${draco_compression_point_cloud_enc_sources} ${draco_compression_point_cloud_enc_sources}
${draco_core_sources} ${draco_core_sources}
${draco_core_bit_coders_sources}
${draco_enc_config_sources} ${draco_enc_config_sources}
${draco_io_sources} ${draco_io_sources}
${draco_mesh_sources} ${draco_mesh_sources}
@ -751,6 +821,40 @@ if (EMSCRIPTEN AND ENABLE_JS_GLUE)
"${draco_build_dir}/glue_encoder.js" "${draco_build_dir}/glue_encoder.js"
"${draco_src_root}/javascript/emscripten/finalize.js") "${draco_src_root}/javascript/emscripten/finalize.js")
if (BUILD_ANIMATION_ENCODING)
add_executable(draco_animation_decoder
${draco_animation_dec_sources}
${draco_animation_js_dec_sources}
${draco_animation_sources}
${draco_decoder_src})
add_executable(draco_animation_encoder
${draco_animation_enc_sources}
${draco_animation_js_enc_sources}
${draco_animation_sources}
${draco_encoder_src})
append_link_flag_to_target(draco_animation_decoder
"-s EXPORT_NAME=\"'DracoAnimationDecoderModule'\"")
append_link_flag_to_target(draco_animation_encoder
"-s EXPORT_NAME=\"'DracoAnimationEncoderModule'\"")
set_property(SOURCE ${draco_js_sources} APPEND PROPERTY OBJECT_DEPENDS
${draco_build_dir}/glue_animation_decoder.cpp)
em_link_pre_js(draco_animation_decoder
"${draco_src_root}/javascript/emscripten/prepareCallbacks.js"
"${draco_src_root}/javascript/emscripten/version.js")
em_link_post_js(draco_animation_decoder
"${draco_build_dir}/glue_animation_decoder.js"
"${draco_src_root}/javascript/emscripten/finalize.js")
set_property(SOURCE ${draco_js_enc_sources} APPEND PROPERTY OBJECT_DEPENDS
${draco_build_dir}/glue_animation_encoder.cpp)
em_link_pre_js(draco_animation_encoder
"${draco_src_root}/javascript/emscripten/prepareCallbacks.js"
"${draco_src_root}/javascript/emscripten/version.js")
em_link_post_js(draco_animation_encoder
"${draco_build_dir}/glue_animation_encoder.js"
"${draco_src_root}/javascript/emscripten/finalize.js")
endif()
else () else ()
# Standard Draco libs, encoder and decoder. # Standard Draco libs, encoder and decoder.
# Object collections that mirror the Draco directory structure. # Object collections that mirror the Draco directory structure.
@ -766,6 +870,8 @@ else ()
${draco_compression_attributes_pred_schemes_dec_sources}) ${draco_compression_attributes_pred_schemes_dec_sources})
add_library(draco_compression_attributes_pred_schemes_enc OBJECT add_library(draco_compression_attributes_pred_schemes_enc OBJECT
${draco_compression_attributes_pred_schemes_enc_sources}) ${draco_compression_attributes_pred_schemes_enc_sources})
add_library(draco_compression_bit_coders OBJECT
${draco_compression_bit_coders_sources})
add_library(draco_enc_config OBJECT add_library(draco_enc_config OBJECT
${draco_enc_config_sources}) ${draco_enc_config_sources})
add_library(draco_dec_config OBJECT add_library(draco_dec_config OBJECT
@ -774,6 +880,10 @@ else ()
${draco_compression_decode_sources}) ${draco_compression_decode_sources})
add_library(draco_compression_encode OBJECT add_library(draco_compression_encode OBJECT
${draco_compression_encode_sources}) ${draco_compression_encode_sources})
add_library(draco_compression_entropy OBJECT
${draco_compression_entropy_sources})
add_library(draco_compression_mesh_traverser OBJECT
${draco_compression_mesh_traverser_sources})
add_library(draco_compression_mesh_dec OBJECT add_library(draco_compression_mesh_dec OBJECT
${draco_compression_mesh_dec_sources}) ${draco_compression_mesh_dec_sources})
add_library(draco_compression_mesh_enc OBJECT add_library(draco_compression_mesh_enc OBJECT
@ -783,12 +893,14 @@ else ()
add_library(draco_compression_point_cloud_enc OBJECT add_library(draco_compression_point_cloud_enc OBJECT
${draco_compression_point_cloud_enc_sources}) ${draco_compression_point_cloud_enc_sources})
add_library(draco_core OBJECT ${draco_core_sources}) add_library(draco_core OBJECT ${draco_core_sources})
add_library(draco_core_bit_coders OBJECT ${draco_core_bit_coders_sources})
add_library(draco_io OBJECT ${draco_io_sources}) add_library(draco_io OBJECT ${draco_io_sources})
add_library(draco_mesh OBJECT ${draco_mesh_sources}) add_library(draco_mesh OBJECT ${draco_mesh_sources})
add_library(draco_metadata_dec OBJECT ${draco_metadata_dec_sources}) add_library(draco_metadata_dec OBJECT ${draco_metadata_dec_sources})
add_library(draco_metadata_enc OBJECT ${draco_metadata_enc_sources}) add_library(draco_metadata_enc OBJECT ${draco_metadata_enc_sources})
add_library(draco_metadata OBJECT ${draco_metadata_sources}) add_library(draco_metadata OBJECT ${draco_metadata_sources})
add_library(draco_animation_dec OBJECT ${draco_animation_dec_sources})
add_library(draco_animation_enc OBJECT ${draco_animation_enc_sources})
add_library(draco_animation OBJECT ${draco_animation_sources})
add_library(draco_point_cloud OBJECT ${draco_point_cloud_sources}) add_library(draco_point_cloud OBJECT ${draco_point_cloud_sources})
add_library(draco_points_dec OBJECT add_library(draco_points_dec OBJECT
${draco_points_common_sources} ${draco_points_common_sources}
@ -813,31 +925,37 @@ else ()
$<TARGET_OBJECTS:draco_attributes> $<TARGET_OBJECTS:draco_attributes>
$<TARGET_OBJECTS:draco_compression_attributes_dec> $<TARGET_OBJECTS:draco_compression_attributes_dec>
$<TARGET_OBJECTS:draco_compression_decode> $<TARGET_OBJECTS:draco_compression_decode>
$<TARGET_OBJECTS:draco_compression_entropy>
$<TARGET_OBJECTS:draco_compression_mesh_dec> $<TARGET_OBJECTS:draco_compression_mesh_dec>
$<TARGET_OBJECTS:draco_compression_point_cloud_dec> $<TARGET_OBJECTS:draco_compression_point_cloud_dec>
$<TARGET_OBJECTS:draco_compression_bit_coders>
$<TARGET_OBJECTS:draco_core> $<TARGET_OBJECTS:draco_core>
$<TARGET_OBJECTS:draco_core_bit_coders>
$<TARGET_OBJECTS:draco_dec_config> $<TARGET_OBJECTS:draco_dec_config>
$<TARGET_OBJECTS:draco_io> $<TARGET_OBJECTS:draco_io>
$<TARGET_OBJECTS:draco_mesh> $<TARGET_OBJECTS:draco_mesh>
$<TARGET_OBJECTS:draco_metadata> $<TARGET_OBJECTS:draco_metadata>
$<TARGET_OBJECTS:draco_metadata_dec> $<TARGET_OBJECTS:draco_metadata_dec>
$<TARGET_OBJECTS:draco_animation>
$<TARGET_OBJECTS:draco_animation_dec>
$<TARGET_OBJECTS:draco_point_cloud> $<TARGET_OBJECTS:draco_point_cloud>
$<TARGET_OBJECTS:draco_points_dec>) $<TARGET_OBJECTS:draco_points_dec>)
add_library(dracoenc add_library(dracoenc
${draco_version_sources} ${draco_version_sources}
$<TARGET_OBJECTS:draco_attributes> $<TARGET_OBJECTS:draco_attributes>
$<TARGET_OBJECTS:draco_compression_attributes_enc> $<TARGET_OBJECTS:draco_compression_attributes_enc>
$<TARGET_OBJECTS:draco_compression_entropy>
$<TARGET_OBJECTS:draco_compression_attributes_pred_schemes_enc> $<TARGET_OBJECTS:draco_compression_attributes_pred_schemes_enc>
$<TARGET_OBJECTS:draco_compression_bit_coders>
$<TARGET_OBJECTS:draco_compression_encode> $<TARGET_OBJECTS:draco_compression_encode>
$<TARGET_OBJECTS:draco_compression_mesh_enc> $<TARGET_OBJECTS:draco_compression_mesh_enc>
$<TARGET_OBJECTS:draco_compression_point_cloud_enc> $<TARGET_OBJECTS:draco_compression_point_cloud_enc>
$<TARGET_OBJECTS:draco_core> $<TARGET_OBJECTS:draco_core>
$<TARGET_OBJECTS:draco_core_bit_coders>
$<TARGET_OBJECTS:draco_enc_config> $<TARGET_OBJECTS:draco_enc_config>
$<TARGET_OBJECTS:draco_mesh> $<TARGET_OBJECTS:draco_mesh>
$<TARGET_OBJECTS:draco_metadata> $<TARGET_OBJECTS:draco_metadata>
$<TARGET_OBJECTS:draco_metadata_enc> $<TARGET_OBJECTS:draco_metadata_enc>
$<TARGET_OBJECTS:draco_animation>
$<TARGET_OBJECTS:draco_animation_enc>
$<TARGET_OBJECTS:draco_point_cloud> $<TARGET_OBJECTS:draco_point_cloud>
$<TARGET_OBJECTS:draco_points_enc>) $<TARGET_OBJECTS:draco_points_enc>)
add_library(draco add_library(draco
@ -847,21 +965,25 @@ else ()
$<TARGET_OBJECTS:draco_compression_attributes_enc> $<TARGET_OBJECTS:draco_compression_attributes_enc>
$<TARGET_OBJECTS:draco_compression_attributes_pred_schemes_dec> $<TARGET_OBJECTS:draco_compression_attributes_pred_schemes_dec>
$<TARGET_OBJECTS:draco_compression_attributes_pred_schemes_enc> $<TARGET_OBJECTS:draco_compression_attributes_pred_schemes_enc>
$<TARGET_OBJECTS:draco_enc_config> $<TARGET_OBJECTS:draco_compression_bit_coders>
$<TARGET_OBJECTS:draco_dec_config>
$<TARGET_OBJECTS:draco_compression_decode> $<TARGET_OBJECTS:draco_compression_decode>
$<TARGET_OBJECTS:draco_compression_encode> $<TARGET_OBJECTS:draco_compression_encode>
$<TARGET_OBJECTS:draco_compression_entropy>
$<TARGET_OBJECTS:draco_compression_mesh_dec> $<TARGET_OBJECTS:draco_compression_mesh_dec>
$<TARGET_OBJECTS:draco_compression_mesh_enc> $<TARGET_OBJECTS:draco_compression_mesh_enc>
$<TARGET_OBJECTS:draco_compression_point_cloud_dec> $<TARGET_OBJECTS:draco_compression_point_cloud_dec>
$<TARGET_OBJECTS:draco_compression_point_cloud_enc> $<TARGET_OBJECTS:draco_compression_point_cloud_enc>
$<TARGET_OBJECTS:draco_core> $<TARGET_OBJECTS:draco_core>
$<TARGET_OBJECTS:draco_core_bit_coders> $<TARGET_OBJECTS:draco_dec_config>
$<TARGET_OBJECTS:draco_enc_config>
$<TARGET_OBJECTS:draco_io> $<TARGET_OBJECTS:draco_io>
$<TARGET_OBJECTS:draco_mesh> $<TARGET_OBJECTS:draco_mesh>
$<TARGET_OBJECTS:draco_metadata> $<TARGET_OBJECTS:draco_metadata>
$<TARGET_OBJECTS:draco_metadata_dec> $<TARGET_OBJECTS:draco_metadata_dec>
$<TARGET_OBJECTS:draco_metadata_enc> $<TARGET_OBJECTS:draco_metadata_enc>
$<TARGET_OBJECTS:draco_animation>
$<TARGET_OBJECTS:draco_animation_dec>
$<TARGET_OBJECTS:draco_animation_enc>
$<TARGET_OBJECTS:draco_point_cloud> $<TARGET_OBJECTS:draco_point_cloud>
$<TARGET_OBJECTS:draco_points_dec> $<TARGET_OBJECTS:draco_points_dec>
$<TARGET_OBJECTS:draco_points_enc>) $<TARGET_OBJECTS:draco_points_enc>)
@ -869,21 +991,22 @@ else ()
add_library(dracodec_unity add_library(dracodec_unity
MODULE MODULE
${draco_version_sources} ${draco_version_sources}
$<TARGET_OBJECTS:draco_unity_plugin>
$<TARGET_OBJECTS:draco_attributes> $<TARGET_OBJECTS:draco_attributes>
$<TARGET_OBJECTS:draco_compression_attributes_dec> $<TARGET_OBJECTS:draco_compression_attributes_dec>
$<TARGET_OBJECTS:draco_compression_bit_coders>
$<TARGET_OBJECTS:draco_compression_decode> $<TARGET_OBJECTS:draco_compression_decode>
$<TARGET_OBJECTS:draco_compression_entropy>
$<TARGET_OBJECTS:draco_compression_mesh_dec> $<TARGET_OBJECTS:draco_compression_mesh_dec>
$<TARGET_OBJECTS:draco_compression_point_cloud_dec> $<TARGET_OBJECTS:draco_compression_point_cloud_dec>
$<TARGET_OBJECTS:draco_core> $<TARGET_OBJECTS:draco_core>
$<TARGET_OBJECTS:draco_core_bit_coders>
$<TARGET_OBJECTS:draco_dec_config> $<TARGET_OBJECTS:draco_dec_config>
$<TARGET_OBJECTS:draco_io> $<TARGET_OBJECTS:draco_io>
$<TARGET_OBJECTS:draco_mesh> $<TARGET_OBJECTS:draco_mesh>
$<TARGET_OBJECTS:draco_metadata> $<TARGET_OBJECTS:draco_metadata>
$<TARGET_OBJECTS:draco_metadata_dec> $<TARGET_OBJECTS:draco_metadata_dec>
$<TARGET_OBJECTS:draco_point_cloud> $<TARGET_OBJECTS:draco_point_cloud>
$<TARGET_OBJECTS:draco_points_dec>) $<TARGET_OBJECTS:draco_points_dec>
$<TARGET_OBJECTS:draco_unity_plugin>)
# For Mac, we need to build a .bundle for plugin. # For Mac, we need to build a .bundle for plugin.
if (APPLE) if (APPLE)
set_target_properties(dracodec_unity PROPERTIES BUNDLE true) set_target_properties(dracodec_unity PROPERTIES BUNDLE true)
@ -894,28 +1017,28 @@ else ()
add_library(draco_maya_wrapper add_library(draco_maya_wrapper
MODULE MODULE
${draco_version_sources} ${draco_version_sources}
$<TARGET_OBJECTS:draco_maya_plugin>
$<TARGET_OBJECTS:draco_compression_attributes_pred_schemes_enc>
$<TARGET_OBJECTS:draco_attributes> $<TARGET_OBJECTS:draco_attributes>
$<TARGET_OBJECTS:draco_compression_attributes_dec> $<TARGET_OBJECTS:draco_compression_attributes_dec>
$<TARGET_OBJECTS:draco_compression_decode>
$<TARGET_OBJECTS:draco_compression_mesh_dec>
$<TARGET_OBJECTS:draco_compression_point_cloud_dec>
$<TARGET_OBJECTS:draco_compression_attributes_enc> $<TARGET_OBJECTS:draco_compression_attributes_enc>
$<TARGET_OBJECTS:draco_compression_attributes_pred_schemes_enc>
$<TARGET_OBJECTS:draco_compression_bit_coders>
$<TARGET_OBJECTS:draco_compression_decode>
$<TARGET_OBJECTS:draco_compression_encode> $<TARGET_OBJECTS:draco_compression_encode>
$<TARGET_OBJECTS:draco_compression_mesh_dec>
$<TARGET_OBJECTS:draco_compression_mesh_enc> $<TARGET_OBJECTS:draco_compression_mesh_enc>
$<TARGET_OBJECTS:draco_compression_point_cloud_dec>
$<TARGET_OBJECTS:draco_compression_point_cloud_enc> $<TARGET_OBJECTS:draco_compression_point_cloud_enc>
$<TARGET_OBJECTS:draco_core> $<TARGET_OBJECTS:draco_core>
$<TARGET_OBJECTS:draco_core_bit_coders>
$<TARGET_OBJECTS:draco_enc_config>
$<TARGET_OBJECTS:draco_dec_config> $<TARGET_OBJECTS:draco_dec_config>
$<TARGET_OBJECTS:draco_enc_config>
$<TARGET_OBJECTS:draco_io> $<TARGET_OBJECTS:draco_io>
$<TARGET_OBJECTS:draco_maya_plugin>
$<TARGET_OBJECTS:draco_mesh> $<TARGET_OBJECTS:draco_mesh>
$<TARGET_OBJECTS:draco_metadata> $<TARGET_OBJECTS:draco_metadata>
$<TARGET_OBJECTS:draco_metadata_dec> $<TARGET_OBJECTS:draco_metadata_dec>
$<TARGET_OBJECTS:draco_metadata_enc>
$<TARGET_OBJECTS:draco_point_cloud> $<TARGET_OBJECTS:draco_point_cloud>
$<TARGET_OBJECTS:draco_points_dec> $<TARGET_OBJECTS:draco_points_dec>
$<TARGET_OBJECTS:draco_metadata_enc>
$<TARGET_OBJECTS:draco_points_enc>) $<TARGET_OBJECTS:draco_points_enc>)
# For Mac, we need to build a .bundle for plugin. # For Mac, we need to build a .bundle for plugin.
@ -926,6 +1049,7 @@ else ()
set(draco_header_only_targets set(draco_header_only_targets
draco_compression_attributes_pred_schemes_dec draco_compression_attributes_pred_schemes_dec
draco_compression_mesh_traverser
draco_dec_config draco_dec_config
draco_enc_config) draco_enc_config)

View File

@ -1,774 +0,0 @@
#########
# Makefile for emscripten
CC=emcc
CXX=em++
AR=emar
LD=emcc
######### Configurations defining feature set #########
# Use "make target DRACO_CONFIG=full|limited" to set the desired configuration
# Select the correct version based on the input flags.
DRACO_CONFIG ?= full
# Full config - all features included.
DRACO_FULL_MESH_CONFIG_DEFINES := -DDRACO_MESH_COMPRESSION_SUPPORTED
DRACO_FULL_MESH_CONFIG_DEFINES += -DDRACO_STANDARD_EDGEBREAKER_SUPPORTED
DRACO_FULL_MESH_CONFIG_DEFINES += -DDRACO_PREDICTIVE_EDGEBREAKER_SUPPORTED
DRACO_FULL_POINT_CLOUD_CONFIG_DEFINES := -DDRACO_POINT_CLOUD_COMPRESSION_SUPPORTED
DRACO_FULL_CONFIG_DEFINES := $(DRACO_FULL_MESH_CONFIG_DEFINES)
DRACO_FULL_CONFIG_DEFINES += $(DRACO_FULL_POINT_CLOUD_CONFIG_DEFINES)
# Default limited config with only some core features enabled.
DRACO_LIMITED_CONFIG_DEFINES := -DDRACO_STANDARD_EDGEBREAKER_SUPPORTED
DRACO_LIMITED_CONFIG_DEFINES += -DDRACO_POINT_CLOUD_COMPRESSION_SUPPORTED
DRACO_LIMITED_CONFIG_DEFINES += -DDRACO_MESH_COMPRESSION_SUPPORTED
ifeq ($(DRACO_CONFIG), limited)
DRACO_CONFIG_DEFINES := $(DRACO_LIMITED_CONFIG_DEFINES)
else ifeq ($(DRACO_CONFIG), full_mesh)
DRACO_CONFIG_DEFINES := $(DRACO_FULL_MESH_CONFIG_DEFINES)
else ifeq ($(DRACO_CONFIG), full_point_cloud)
DRACO_CONFIG_DEFINES := $(DRACO_FULL_POINT_CLOUD_CONFIG_DEFINES)
else
DRACO_CONFIG_DEFINES := $(DRACO_FULL_CONFIG_DEFINES)
endif
#########
DEFINES := $(DRACO_CONFIG_DEFINES)
INCLUDES := -I../../ -I./ -I./src/
SRCDIR := src/draco
OBJDIR := obj
LIBDIR := libs
IDL := $(SRCDIR)/javascript/emscripten/draco_web_decoder.idl
BINDER := $(EMSCRIPTEN)/tools/webidl_binder.py
# In order to open an input mesh file with test_mesh_encoder, you need to add
# the mesh here. Then you need to add the test_mesh_encoder command line
# arguments to the generated html file. E.g.
# arguments: ["-m","1","-q","9", "-noerror","-no3rdparty","-f","cube.obj"],
#MESH_FILE := --preload-file cube.obj
MESH_FILE :=
ALL_C_OPTS := -std=c++11
# Options to reduce JavaScript size.
#ALL_C_OPTS += -Oz -s NO_FILESYSTEM=1 -s DISABLE_EXCEPTION_CATCHING=1
#ALL_C_OPTS += -s USE_SDL=0 -s USE_SDL_IMAGE=0 -s USE_SDL_TTF=0
# Options for speed.
ifeq ($(IE_COMPATIBLE), true)
ALL_C_OPTS += -g
else
ALL_C_OPTS += -O3
endif
ALL_C_OPTS += -s NO_FILESYSTEM=1 -s ELIMINATE_DUPLICATE_FUNCTIONS=1
ALL_C_OPTS += -s EXPORTED_RUNTIME_METHODS=[]
ALL_C_OPTS += -s PRECISE_F32=1
# Option to get about a 10% speed increase at the cost of about 10% in size.
# Use "make target DRACO_PERFORMANCE_TYPE=extra_speed"
ifeq ($(DRACO_PERFORMANCE_TYPE), extra_speed)
ALL_C_OPTS += --llvm-lto 1
endif
# Options for debug
#ALL_C_OPTS += -g -s DEMANGLE_SUPPORT=1
# If you use -s ALLOW_MEMORY_GROWTH=1 it may turn off some optimizations which
# will hurt performance.
ALL_C_OPTS += -s ALLOW_MEMORY_GROWTH=1
#ALL_C_OPTS += -s TOTAL_MEMORY=67108864
# Allow legacy vm support for IE11
ifeq ($(IE_COMPATIBLE), true)
ALL_C_OPTS += -s LEGACY_VM_SUPPORT=1
endif
# Export the main module as "DracoDecoderModule".
ALL_C_OPTS += -s MODULARIZE=1 -s EXPORT_NAME="'DracoDecoderModule'"
# Do not create a .mem file.
ALL_C_OPTS += --memory-init-file 0
# Options to separate asm.js and mem file.
#ALL_C_OPTS += --separate-asm --memory-init-file 1
# Options to output WebAssembly code.
# Use "make target DRACO_BUILD_TYPE=wasm"
ifeq ($(DRACO_BUILD_TYPE), wasm)
ALL_C_OPTS += -s WASM=1
endif
CFLAGS := $(ALL_C_OPTS)
CXXFLAGS := $(ALL_C_OPTS)
CFLAGS += -Wno-sign-compare -fno-omit-frame-pointer
CXXFLAGS += -Wno-sign-compare -fno-omit-frame-pointer
ALL_CXXFLAGS := -MMD -MP $(DEFINES) $(INCLUDES) $(CXXFLAGS)
DATA_BUFFER_A := libdata_buffer.a
DATA_BUFFER_OBJS := core/data_buffer.o
QUANTIZATION_UTILS_A := libquantization_utils.a
QUANTIZATION_UTILS_OBJS := core/quantization_utils.o
CYCLE_TIMER_A := libcycle_timer.a
CYCLE_TIMER_OBJS := core/cycle_timer.o
ENCODER_BUFFER_A := libencoder_buffer.a
ENCODER_BUFFER_OBJS := core/encoder_buffer.o
DECODER_BUFFER_A := libdecoder_buffer.a
DECODER_BUFFER_OBJS := core/decoder_buffer.o
RANS_BIT_DECODER_A := librans_bit_decoder.a
RANS_BIT_DECODER_OBJS := core/divide.o core/bit_coders/rans_bit_decoder.o
RANS_BIT_ENCODER_A := librans_bit_encoder.a
RANS_BIT_ENCODER_OBJS := core/divide.o core/bit_coders/rans_bit_encoder.o
ADAPTIVE_RANS_BIT_DECODER_A := libadaptive_rans_bit_decoder.a
ADAPTIVE_RANS_BIT_DECODER_OBJS := core/bit_coders/adaptive_rans_bit_decoder.o
ADAPTIVE_RANS_BIT_ENCODER_A := libadaptive_rans_bit_encoder.a
ADAPTIVE_RANS_BIT_ENCODER_OBJS := core/bit_coders/adaptive_rans_bit_encoder.o
CORNER_TABLE_A := libcorner_table.a
CORNER_TABLE_OBJS := mesh/corner_table.o
SHANNON_ENTROPY_A := libshannon_entropy.a
SHANNON_ENTROPY_OBJS := core/shannon_entropy.o
SYMBOL_CODING_A := libsymbol_coding.a
SYMBOL_CODING_OBJS := \
core/symbol_decoding.o core/symbol_encoding.o core/symbol_coding_utils.o
DIRECT_BIT_DECODER_A := libdirect_bit_decoder.a
DIRECT_BIT_DECODER_OBJS := core/bit_coders/direct_bit_decoder.o
DIRECT_BIT_ENCODER_A := libdirect_bit_encoder.a
DIRECT_BIT_ENCODER_OBJS := core/bit_coders/direct_bit_encoder.o
DRACO_TYPES_A := libdraco_types.a
DRACO_TYPES_OBJS := core/draco_types.o
METADATA_A := metadata/libmetadata.a
METADATA_OBJS := metadata/metadata.o
GEOMETRY_METADATA_A := metadata/libgeometry_metadata.a
GEOMETRY_METADATA_OBJS := metadata/geometry_metadata.o
METADATA_ENCODER_A := metadata/libmetadata_encoder.a
METADATA_ENCODER_OBJS := metadata/metadata_encoder.o
METADATA_DECODER_A := metadata/libmetadata_decoder.a
METADATA_DECODER_OBJS := metadata/metadata_decoder.o
GEOMETRY_ATTRIBUTE_A := geometry_attribute.a
GEOMETRY_ATTRIBUTE_OBJS := attributes/geometry_attribute.o
POINT_ATTRIBUTE_A := point_attribute.a
POINT_ATTRIBUTE_OBJS := attributes/point_attribute.o
ATTRIBUTE_OCTAHEDRON_TRANSFORM_A := attribute_octahedron_transform.a
ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJS := attributes/attribute_octahedron_transform.o
ATTRIBUTE_QUANTIZATION_TRANSFORM_A := attribute_quantization_transform.a
ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJS := attributes/attribute_quantization_transform.o
ATTRIBUTE_TRANSFORM_A := attribute_transform.a
ATTRIBUTE_TRANSFORM_OBJS := attributes/attribute_transform.o
POINT_CLOUD_A := point_cloud.a
POINT_CLOUD_OBJS := point_cloud/point_cloud.o
MESH_A := libmesh.a
MESH_OBJS := mesh/mesh.o
MESH_STRIPIFIER_A := libmesh_stripifier.a
MESH_STRIPIFIER_OBJS := mesh/mesh_stripifier.o
OPTIONS_A := options.a
OPTIONS_OBJS := core/options.o
POINT_CLOUD_ENCODER_BASE_A := point_cloud_encoder_base.a
POINT_CLOUD_ENCODER_BASE_OBJS := compression/attributes/attributes_encoder.o
POINT_CLOUD_ENCODER_BASE_OBJS += compression/point_cloud/point_cloud_encoder.o
POINT_CLOUD_DECODER_BASE_A := point_cloud_decoder_base.a
POINT_CLOUD_DECODER_BASE_OBJS := compression/attributes/attributes_decoder.o
POINT_CLOUD_DECODER_BASE_OBJS += compression/point_cloud/point_cloud_decoder.o
MESH_ENCODER_BASE_A := mesh_encoder_base.a
MESH_ENCODER_BASE_OBJS := compression/mesh/mesh_encoder.o
MESH_DECODER_BASE_A := mesh_decoder_base.a
MESH_DECODER_BASE_OBJS := compression/mesh/mesh_decoder.o
SEQUENTIAL_ATTRIBUTE_ENCODER_A := sequential_attribute_encoder.a
SEQUENTIAL_ATTRIBUTE_ENCODER_OBJS := \
compression/attributes/sequential_attribute_encoder.o
SEQUENTIAL_ATTRIBUTE_DECODER_A := sequential_attribute_decoder.a
SEQUENTIAL_ATTRIBUTE_DECODER_OBJS := \
compression/attributes/sequential_attribute_decoder.o
SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_A := \
sequential_integer_attribute_encoder.a
SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJS := \
compression/attributes/sequential_integer_attribute_encoder.o
SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_A := \
sequential_integer_attribute_decoder.a
SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJS := \
compression/attributes/sequential_integer_attribute_decoder.o
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_A := \
sequential_quantization_attribute_encoder.a
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJS := \
compression/attributes/sequential_quantization_attribute_encoder.o
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_A := \
sequential_quantization_attribute_decoder.a
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJS := \
compression/attributes/sequential_quantization_attribute_decoder.o
KD_TREE_ATTRIBUTES_ENCODER_A := kd_tree_attributes_encoder.a
KD_TREE_ATTRIBUTES_ENCODER_OBJS := \
compression/attributes/kd_tree_attributes_encoder.o
KD_TREE_ATTRIBUTES_DECODER_A := kd_tree_attributes_decoder.a
KD_TREE_ATTRIBUTES_DECODER_OBJS := \
compression/attributes/kd_tree_attributes_decoder.o
SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_A := \
sequential_normal_attribute_encoder.a
SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJS := \
compression/attributes/sequential_normal_attribute_encoder.o
SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_A := \
sequential_normal_attribute_decoder.a
SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJS := \
compression/attributes/sequential_normal_attribute_decoder.o
SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_A := \
sequential_attribute_encoders_controller.a
SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJS := \
compression/attributes/sequential_attribute_encoders_controller.o
SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_A := \
sequential_attribute_decoders_controller.a
SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJS := \
compression/attributes/sequential_attribute_decoders_controller.o
POINT_CLOUD_SEQUENTIAL_ENCODER_A := point_cloud_sequential_encoder.a
POINT_CLOUD_SEQUENTIAL_ENCODER_OBJS := \
compression/point_cloud/point_cloud_sequential_encoder.o
POINT_CLOUD_SEQUENTIAL_DECODER_A := point_cloud_sequential_decoder.a
POINT_CLOUD_SEQUENTIAL_DECODER_OBJS := \
compression/point_cloud/point_cloud_sequential_decoder.o
POINT_CLOUD_KD_TREE_ENCODER_A := point_cloud_kd_tree_encoder.a
POINT_CLOUD_KD_TREE_ENCODER_OBJS := \
compression/point_cloud/point_cloud_kd_tree_encoder.o
POINT_CLOUD_KD_TREE_DECODER_A := point_cloud_kd_tree_decoder.a
POINT_CLOUD_KD_TREE_DECODER_OBJS := \
compression/point_cloud/point_cloud_kd_tree_decoder.o
MESH_SEQUENTIAL_ENCODER_A := mesh_sequential_encoder.a
MESH_SEQUENTIAL_ENCODER_OBJS := compression/mesh/mesh_sequential_encoder.o
MESH_SEQUENTIAL_DECODER_A := mesh_sequential_decoder.a
MESH_SEQUENTIAL_DECODER_OBJS := compression/mesh/mesh_sequential_decoder.o
MESH_EDGEBREAKER_ENCODER_A := mesh_edgebreaker_encoder.a
MESH_EDGEBREAKER_ENCODER_OBJS := compression/mesh/mesh_edgebreaker_encoder.o
MESH_EDGEBREAKER_ENCODER_OBJS += \
compression/mesh/mesh_edgebreaker_encoder_impl.o
MESH_EDGEBREAKER_DECODER_A := mesh_edgebreaker_encoder.a
MESH_EDGEBREAKER_DECODER_OBJS := compression/mesh/mesh_edgebreaker_decoder.o
MESH_EDGEBREAKER_DECODER_OBJS += \
compression/mesh/mesh_edgebreaker_decoder_impl.o
ENCODE_A := encode.a
ENCODE_OBJS := compression/encode.o
DECODE_A := decode.a
DECODE_OBJS := compression/decode.o
OBJ_DECODER_A := libobj_decoder.a
OBJ_DECODER_OBJS := io/obj_decoder.o
PLY_DECODER_A := libply_decoder.a
PLY_DECODER_OBJS := core/hash_utils.o io/ply_decoder.o
PLY_ENCODER_A := libply_encoder.a
PLY_ENCODER_OBJS := io/ply_encoder.o
MESH_IO_A := libmesh_io.a
MESH_IO_OBJS := io/mesh_io.o
MESH_ATTRIBUTE_CORNER_TABLE_A := libmesh_attribute_corner_table.a
MESH_ATTRIBUTE_CORNER_TABLE_OBJS := mesh/mesh_attribute_corner_table.o
MESH_MISC_A := libmesh_misc.a
MESH_MISC_OBJS := mesh/mesh_misc_functions.o
FLOAT_POINTS_TREE_DECODER_A := \
libfloat_points_tree_decoder.a
FLOAT_POINTS_TREE_DECODER_OBJS := \
compression/point_cloud/algorithms/float_points_tree_decoder.o
FLOAT_POINTS_TREE_ENCODER_A := \
libfloat_points_tree_encoder.a
FLOAT_POINTS_TREE_ENCODER_OBJS := \
compression/point_cloud/algorithms/float_points_tree_encoder.o
DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_A := \
libdynamic_integer_points_kd_tree_decoder.a
DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJS := \
compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.o
DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_A := \
libdynamic_integer_points_kd_tree_encoder.a
DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJS := \
compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.o
CORNER_TABLE_OBJSA := $(addprefix $(OBJDIR)/,$(CORNER_TABLE_OBJS:.o=_a.o))
SHANNON_ENTROPY_OBJSA := $(addprefix $(OBJDIR)/,$(SHANNON_ENTROPY_OBJS:.o=_a.o))
SYMBOL_CODING_OBJSA := $(addprefix $(OBJDIR)/,$(SYMBOL_CODING_OBJS:.o=_a.o))
DIRECT_BIT_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(DIRECT_BIT_DECODER_OBJS:.o=_a.o))
DIRECT_BIT_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(DIRECT_BIT_ENCODER_OBJS:.o=_a.o))
DECODER_BUFFER_OBJSA := $(addprefix $(OBJDIR)/,$(DECODER_BUFFER_OBJS:.o=_a.o))
DATA_BUFFER_OBJSA := $(addprefix $(OBJDIR)/,$(DATA_BUFFER_OBJS:.o=_a.o))
DRACO_TYPES_OBJSA := $(addprefix $(OBJDIR)/,$(DRACO_TYPES_OBJS:.o=_a.o))
METADATA_OBJSA := \
$(addprefix $(OBJDIR)/,$(METADATA_OBJS:.o=_a.o))
GEOMETRY_METADATA_OBJSA := \
$(addprefix $(OBJDIR)/,$(GEOMETRY_METADATA_OBJS:.o=_a.o))
METADATA_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(METADATA_ENCODER_OBJS:.o=_a.o))
METADATA_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(METADATA_DECODER_OBJS:.o=_a.o))
GEOMETRY_ATTRIBUTE_OBJSA := \
$(addprefix $(OBJDIR)/,$(GEOMETRY_ATTRIBUTE_OBJS:.o=_a.o))
POINT_ATTRIBUTE_OBJSA := $(addprefix $(OBJDIR)/,$(POINT_ATTRIBUTE_OBJS:.o=_a.o))
ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJSA := $(addprefix $(OBJDIR)/,$(ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJS:.o=_a.o))
ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJSA := $(addprefix $(OBJDIR)/,$(ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJS:.o=_a.o))
ATTRIBUTE_TRANSFORM_OBJSA := $(addprefix $(OBJDIR)/,$(ATTRIBUTE_TRANSFORM_OBJS:.o=_a.o))
POINT_CLOUD_OBJSA := $(addprefix $(OBJDIR)/,$(POINT_CLOUD_OBJS:.o=_a.o))
MESH_OBJSA := $(addprefix $(OBJDIR)/,$(MESH_OBJS:.o=_a.o))
MESH_STRIPIFIER_OBJSA := $(addprefix $(OBJDIR)/,$(MESH_STRIPIFIER_OBJS:.o=_a.o))
OPTIONS_OBJSA := $(addprefix $(OBJDIR)/,$(OPTIONS_OBJS:.o=_a.o))
POINT_CLOUD_ENCODER_BASE_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_ENCODER_BASE_OBJS:.o=_a.o))
POINT_CLOUD_DECODER_BASE_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_DECODER_BASE_OBJS:.o=_a.o))
MESH_ENCODER_BASE_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_ENCODER_BASE_OBJS:.o=_a.o))
MESH_DECODER_BASE_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_DECODER_BASE_OBJS:.o=_a.o))
SEQUENTIAL_ATTRIBUTE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(SEQUENTIAL_ATTRIBUTE_ENCODER_OBJS:.o=_a.o))
SEQUENTIAL_ATTRIBUTE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(SEQUENTIAL_ATTRIBUTE_DECODER_OBJS:.o=_a.o))
SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJS:.o=_a.o))
SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJS:.o=_a.o))
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJS:.o=_a.o))
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJS:.o=_a.o))
KD_TREE_ATTRIBUTES_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/, $(KD_TREE_ATTRIBUTES_ENCODER_OBJS:.o=_a.o))
KD_TREE_ATTRIBUTES_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/, $(KD_TREE_ATTRIBUTES_DECODER_OBJS:.o=_a.o))
SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJS:.o=_a.o))
SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJS:.o=_a.o))
SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJS:.o=_a.o))
SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJS:.o=_a.o))
POINT_CLOUD_SEQUENTIAL_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_SEQUENTIAL_ENCODER_OBJS:.o=_a.o))
POINT_CLOUD_SEQUENTIAL_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_SEQUENTIAL_DECODER_OBJS:.o=_a.o))
POINT_CLOUD_KD_TREE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_KD_TREE_ENCODER_OBJS:.o=_a.o))
POINT_CLOUD_KD_TREE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_KD_TREE_DECODER_OBJS:.o=_a.o))
MESH_SEQUENTIAL_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_SEQUENTIAL_ENCODER_OBJS:.o=_a.o))
MESH_SEQUENTIAL_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_SEQUENTIAL_DECODER_OBJS:.o=_a.o))
MESH_EDGEBREAKER_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_EDGEBREAKER_ENCODER_OBJS:.o=_a.o))
MESH_EDGEBREAKER_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_EDGEBREAKER_DECODER_OBJS:.o=_a.o))
ENCODE_OBJSA := $(addprefix $(OBJDIR)/,$(ENCODE_OBJS:.o=_a.o))
DECODE_OBJSA := $(addprefix $(OBJDIR)/,$(DECODE_OBJS:.o=_a.o))
MESH_MISC_OBJSA := $(addprefix $(OBJDIR)/,$(MESH_MISC_OBJS:.o=_a.o))
MESH_ATTRIBUTE_CORNER_TABLE_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_ATTRIBUTE_CORNER_TABLE_OBJS:.o=_a.o))
QUANTIZATION_UTILS_OBJSA := \
$(addprefix $(OBJDIR)/,$(QUANTIZATION_UTILS_OBJS:.o=_a.o))
CYCLE_TIMER_OBJSA := $(addprefix $(OBJDIR)/,$(CYCLE_TIMER_OBJS:.o=_a.o))
ENCODER_BUFFER_OBJSA := $(addprefix $(OBJDIR)/,$(ENCODER_BUFFER_OBJS:.o=_a.o))
RANS_BIT_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(RANS_BIT_DECODER_OBJS:.o=_a.o))
RANS_BIT_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(RANS_BIT_ENCODER_OBJS:.o=_a.o))
ADAPTIVE_RANS_BIT_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(ADAPTIVE_RANS_BIT_DECODER_OBJS:.o=_a.o))
ADAPTIVE_RANS_BIT_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(ADAPTIVE_RANS_BIT_ENCODER_OBJS:.o=_a.o))
OBJ_DECODER_OBJSA := $(addprefix $(OBJDIR)/,$(OBJ_DECODER_OBJS:.o=_a.o))
MESH_IO_OBJSA := $(addprefix $(OBJDIR)/,$(MESH_IO_OBJS:.o=_a.o))
PLY_ENCODER_OBJSA := $(addprefix $(OBJDIR)/,$(PLY_ENCODER_OBJS:.o=_a.o))
PLY_DECODER_OBJSA := $(addprefix $(OBJDIR)/,$(PLY_DECODER_OBJS:.o=_a.o))
FLOAT_POINTS_TREE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(FLOAT_POINTS_TREE_DECODER_OBJS:.o=_a.o))
FLOAT_POINTS_TREE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(FLOAT_POINTS_TREE_ENCODER_OBJS:.o=_a.o))
DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJS:.o=_a.o))
DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJS:.o=_a.o))
# Core objs
DRACO_CORE_OBJSA := $(DRACO_TYPES_OBJSA)
DRACO_CORE_OBJSA += $(DIRECT_BIT_DECODER_OBJSA)
DRACO_CORE_OBJSA += $(DIRECT_BIT_ENCODER_OBJSA)
DRACO_CORE_OBJSA += $(RANS_BIT_DECODER_OBJSA)
DRACO_CORE_OBJSA += $(RANS_BIT_ENCODER_OBJSA)
DRACO_CORE_OBJSA += $(ADAPTIVE_RANS_BIT_DECODER_OBJSA)
DRACO_CORE_OBJSA += $(ADAPTIVE_RANS_BIT_ENCODER_OBJSA)
# Shared objs needed for both encoder and decoder
DRACO_SHARED_OBJSA := $(CORNER_TABLE_OBJSA) $(SYMBOL_CODING_OBJSA)
DRACO_SHARED_OBJSA += $(SHANNON_ENTROPY_OBJSA)
DRACO_SHARED_OBJSA += $(DATA_BUFFER_OBJSA) $(DRACO_CORE_OBJSA)
DRACO_SHARED_OBJSA += $(GEOMETRY_ATTRIBUTE_OBJSA)
DRACO_SHARED_OBJSA += $(POINT_ATTRIBUTE_OBJSA)
DRACO_SHARED_OBJSA += $(ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJSA)
DRACO_SHARED_OBJSA += $(ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJSA)
DRACO_SHARED_OBJSA += $(ATTRIBUTE_TRANSFORM_OBJSA)
DRACO_SHARED_OBJSA += $(POINT_CLOUD_OBJSA)
DRACO_SHARED_OBJSA += $(MESH_OBJSA)
DRACO_SHARED_OBJSA += $(MESH_MISC_OBJSA) $(MESH_ATTRIBUTE_CORNER_TABLE_OBJSA)
DRACO_SHARED_OBJSA += $(METADATA_OBJSA)
DRACO_SHARED_OBJSA += $(GEOMETRY_METADATA_OBJSA)
DRACO_SHARED_OBJSA += $(CYCLE_TIMER_OBJSA)
DRACO_SHARED_OBJSA += $(RANS_BIT_DECODER_OBJSA)
DRACO_SHARED_OBJSA += $(RANS_BIT_ENCODER_OBJSA)
DRACO_SHARED_OBJSA += $(QUANTIZATION_UTILS_OBJSA)
# Encoder specific objs
DRACO_ENCODER_OBJSA := $(OPTIONS_OBJSA)
DRACO_ENCODER_OBJSA += $(POINT_CLOUD_ENCODER_BASE_OBJSA)
DRACO_ENCODER_OBJSA += $(MESH_ENCODER_BASE_OBJSA)
DRACO_ENCODER_OBJSA += $(METADATA_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_ATTRIBUTE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJSA)
DRACO_ENCODER_OBJSA += $(POINT_CLOUD_SEQUENTIAL_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(POINT_CLOUD_KD_TREE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(KD_TREE_ATTRIBUTES_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(FLOAT_POINTS_TREE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(MESH_SEQUENTIAL_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(MESH_EDGEBREAKER_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(ENCODE_OBJSA)
DRACO_ENCODER_OBJSA += $(ENCODER_BUFFER_OBJSA)
# Decoder specific objs
DRACO_DECODER_OBJSA := $(DECODER_BUFFER_OBJSA)
DRACO_DECODER_OBJSA += $(OPTIONS_OBJSA)
DRACO_DECODER_OBJSA += $(POINT_CLOUD_DECODER_BASE_OBJSA)
DRACO_DECODER_OBJSA += $(MESH_DECODER_BASE_OBJSA)
DRACO_DECODER_OBJSA += $(METADATA_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_ATTRIBUTE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJSA)
DRACO_DECODER_OBJSA += $(POINT_CLOUD_SEQUENTIAL_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(POINT_CLOUD_KD_TREE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(KD_TREE_ATTRIBUTES_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(FLOAT_POINTS_TREE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(MESH_STRIPIFIER_OBJSA)
DRACO_DECODER_OBJSA += $(MESH_SEQUENTIAL_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(MESH_EDGEBREAKER_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(DECODE_OBJSA)
# I/O objs
DRACO_IO_OBJSA := $(OBJ_DECODER_OBJSA) $(MESH_IO_OBJSA)
DRACO_IO_OBJSA += $(PLY_ENCODER_OBJSA) $(PLY_DECODER_OBJSA)
# All objs
DRACO_OBJSA := $(DRACO_SHARED_OBJSA)
DRACO_OBJSA += $(DRACO_ENCODER_OBJSA)
DRACO_OBJSA += $(DRACO_DECODER_OBJSA)
DRACO_OBJSA += $(DRACO_IO_OBJSA)
OBJSA := $(DRACO_OBJSA)
LIBS := $(LIBDIR)/libmesh_io.a
LIBS += $(LIBDIR)/libply_decoder.a
LIBS += $(LIBDIR)/libply_encoder.a
LIBS += $(LIBDIR)/libobj_decoder.a
LIBS += $(LIBDIR)/libgeometry_attribute.a
LIBS += $(LIBDIR)/libpoint_cloud.a
LIBS += $(LIBDIR)/libpoint_attribute.a
LIBS += $(LIBDIR)/libattribute_octahedron_transform.a
LIBS += $(LIBDIR)/libattribute_quantization_transform.a
LIBS += $(LIBDIR)/libattribute_transform.a
LIBS += $(LIBDIR)/liboptions.a
LIBS += $(LIBDIR)/libencode.a
LIBS += $(LIBDIR)/libdecode.a
LIBS += $(LIBDIR)/libmesh.a
LIBS += $(LIBDIR)/libmesh_decoder_base.a
LIBS += $(LIBDIR)/libmesh_stripifier.a
LIBS += $(LIBDIR)/libpoint_cloud_sequential_decoder.a
LIBS += $(LIBDIR)/libpoint_cloud_kd_tree_decoder.a
LIBS += $(LIBDIR)/libkd_tree_attributes_decoder.a
LIBS += $(LIBDIR)/libmesh_sequential_decoder.a
LIBS += $(LIBDIR)/libmesh_edgebreaker_decoder.a
LIBS += $(LIBDIR)/libsequential_attribute_decoders_controller.a
LIBS += $(LIBDIR)/libpoint_cloud_decoder_base.a
LIBS += $(LIBDIR)/libsequential_integer_attribute_decoder.a
LIBS += $(LIBDIR)/libsequential_attribute_decoder.a
LIBS += $(LIBDIR)/libsequential_quantization_attribute_decoder.a
LIBS += $(LIBDIR)/libsequential_normal_attribute_decoder.a
LIBS += $(LIBDIR)/libquantization_utils.a
LIBS += $(LIBDIR)/libmesh_encoder_base.a
LIBS += $(LIBDIR)/libpoint_cloud_sequential_encoder.a
LIBS += $(LIBDIR)/libpoint_cloud_kd_tree_encoder.a
LIBS += $(LIBDIR)/libkd_tree_attributes_encoder.a
LIBS += $(LIBDIR)/libmesh_sequential_encoder.a
LIBS += $(LIBDIR)/libmesh_edgebreaker_encoder.a
LIBS += $(LIBDIR)/libsequential_attribute_encoder.a
LIBS += $(LIBDIR)/libsequential_attribute_encoders_controller.a
LIBS += $(LIBDIR)/libpoint_cloud_encoder_base.a
LIBS += $(LIBDIR)/libsequential_integer_attribute_encoder.a
LIBS += $(LIBDIR)/libsequential_quantization_attribute_encoder.a
LIBS += $(LIBDIR)/libsequential_normal_attribute_encoder.a
LIBS += $(LIBDIR)/libcorner_table.a
LIBS += $(LIBDIR)/libmesh_attribute_corner_table.a
LIBS += $(LIBDIR)/libmesh_misc.a
LIBS += $(LIBDIR)/libshannon_entropy.a
LIBS += $(LIBDIR)/libsymbol_coding.a
LIBS += $(LIBDIR)/librans_bit_decoder.a
LIBS += $(LIBDIR)/librans_bit_encoder.a
LIBS += $(LIBDIR)/libdata_buffer.a
LIBS += $(LIBDIR)/libdraco_types.a
LIBS += $(LIBDIR)/libmetadata.a
LIBS += $(LIBDIR)/libgeometry_metadata.a
LIBS += $(LIBDIR)/libmetadata_encoder.a
LIBS += $(LIBDIR)/libmetadata_decoder.a
LIBS += $(LIBDIR)/libdecoder_buffer.a
LIBS += $(LIBDIR)/libencoder_buffer.a
LIBS += $(LIBDIR)/libcycle_timer.a
POINTS_LIBS := $(LIBDIR)/libfloat_points_tree_decoder.a
POINTS_LIBS += $(LIBDIR)/libfloat_points_tree_encoder.a
POINTS_LIBS += $(LIBDIR)/libdynamic_integer_points_kd_tree_decoder.a
POINTS_LIBS += $(LIBDIR)/libdynamic_integer_points_kd_tree_encoder.a
POINTS_LIBS += $(LIBDIR)/libdirect_bit_decoder.a
POINTS_LIBS += $(LIBDIR)/libdirect_bit_encoder.a
POINTS_LIBS += $(LIBDIR)/libadaptive_rans_bit_decoder.a
POINTS_LIBS += $(LIBDIR)/libadaptive_rans_bit_encoder.a
DEPS := $(DRACO_OBJSA:_a.o=.d)
CLEAN := $(DEPS) $(OBJSA) $(LIBS) $(POINTS_LIBS)
CLEAN += glue_decoder.cpp glue_decoder.js draco_decoder.js WebIDLGrammar.pkl parser.out
CLEAN += $(OBJDIR)/javascript/emscripten/draco_decoder_glue_wrapper.o $(OBJDIR)/javascript/emscripten/draco_decoder_glue_wrapper.d
CLEAN += $(OBJDIR)/javascript/emscripten/decoder_webidl_wrapper.o $(OBJDIR)/javascript/emscripten/decoder_webidl_wrapper.d
all: jslib
jslib: build_glue draco_decoder
build_glue:
python $(BINDER) $(IDL) glue_decoder
draco_decoder: $(OBJDIR)/javascript/emscripten/draco_decoder_glue_wrapper.o $(OBJDIR)/javascript/emscripten/decoder_webidl_wrapper.o $(DRACO_CORE_OBJSA) $(DRACO_SHARED_OBJSA) $(DRACO_DECODER_OBJSA)
$(CXX) $(ALL_C_OPTS) $^ --pre-js $(SRCDIR)/javascript/emscripten/prepareCallbacks.js --pre-js $(SRCDIR)/javascript/emscripten/version.js --post-js glue_decoder.js --post-js $(SRCDIR)/javascript/emscripten/finalize.js -o $@.js
$(LIBDIR)/libcorner_table.a: $(CORNER_TABLE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libshannon_entropy.a: $(SHANNON_ENTROPY_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsymbol_coding.a: $(SYMBOL_CODING_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdirect_bit_decoder.a: $(DIRECT_BIT_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdirect_bit_encoder.a: $(DIRECT_BIT_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdecoder_buffer.a: $(DECODER_BUFFER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdata_buffer.a: $(DATA_BUFFER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdraco_types.a: $(DRACO_TYPES_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmetadata.a: $(MEATDATA_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libgeometry_metadata.a: $(GEOMETRY_MEATDATA_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmetadata_encoder.a: $(MEATDATA_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmetadata_decoder.a: $(MEATDATA_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libgeometry_attribute.a: $(GEOMETRY_ATTRIBUTE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_attribute.a: $(POINT_ATTRIBUTE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libattribute_octahedron_transform.a: $(ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libattribute_quantization_transform.a: $(ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libattribute_transform.a: $(ATTRIBUTE_TRANSFORM_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud.a: $(POINT_CLOUD_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh.a: $(MESH_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_stripifier.a: $(MESH_STRIPIFIER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/liboptions.a: $(OPTIONS_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_encoder_base.a: $(POINT_CLOUD_ENCODER_BASE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_decoder_base.a: $(POINT_CLOUD_DECODER_BASE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_encoder_base.a: $(MESH_ENCODER_BASE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_decoder_base.a: $(MESH_DECODER_BASE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_attribute_encoder.a: \
$(SEQUENTIAL_ATTRIBUTE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_attribute_decoder.a: \
$(SEQUENTIAL_ATTRIBUTE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_integer_attribute_encoder.a: \
$(SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_integer_attribute_decoder.a: \
$(SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_quantization_attribute_encoder.a: \
$(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_quantization_attribute_decoder.a: \
$(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libkd_tree_attributes_encoder.a: $(KD_TREE_ATTRIBUTES_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libkd_tree_attributes_decoder.a: $(KD_TREE_ATTRIBUTES_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_normal_attribute_encoder.a: \
$(SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_normal_attribute_decoder.a: \
$(SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_attribute_encoders_controller.a: \
$(SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_attribute_decoders_controller.a: \
$(SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_sequential_encoder.a: \
$(POINT_CLOUD_SEQUENTIAL_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_sequential_decoder.a: \
$(POINT_CLOUD_SEQUENTIAL_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_kd_tree_encoder.a: \
$(POINT_CLOUD_KD_TREE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_kd_tree_decoder.a: \
$(POINT_CLOUD_KD_TREE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_sequential_encoder.a: $(MESH_SEQUENTIAL_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_sequential_decoder.a: $(MESH_SEQUENTIAL_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_edgebreaker_encoder.a: $(MESH_EDGEBREAKER_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_edgebreaker_decoder.a: $(MESH_EDGEBREAKER_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libencode.a: $(ENCODE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdecode.a: $(DECODE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_misc.a: $(MESH_MISC_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_attribute_corner_table.a: $(MESH_ATTRIBUTE_CORNER_TABLE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libencoder_buffer.a: $(ENCODER_BUFFER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libquantization_utils.a: $(QUANTIZATION_UTILS_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libcycle_timer.a: $(CYCLE_TIMER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/librans_bit_decoder.a: $(RANS_BIT_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/librans_bit_encoder.a: $(RANS_BIT_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libadaptive_rans_bit_decoder.a: $(ADAPTIVE_RANS_BIT_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libadaptive_rans_bit_encoder.a: $(ADAPTIVE_RANS_BIT_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libobj_decoder.a: $(OBJ_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_io.a: $(MESH_IO_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libply_encoder.a: $(PLY_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libply_decoder.a: $(PLY_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libfloat_points_tree_decoder.a: $(FLOAT_POINTS_TREE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libfloat_points_tree_encoder.a: $(FLOAT_POINTS_TREE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdynamic_integer_points_kd_tree_decoder.a: \
$(DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdynamic_integer_points_kd_tree_encoder.a: \
$(DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.cc
@mkdir -p $(@D)
$(CXX) $(ALL_CXXFLAGS) $< -o $@
$(OBJDIR)/%_a.o: $(SRCDIR)/%.cc
@mkdir -p $(@D)
$(CXX) $(ALL_CXXFLAGS) $< -o $@
clean:
$(RM) $(CLEAN)

View File

@ -1,777 +0,0 @@
#########
# Makefile for emscripten
CC=emcc
CXX=em++
AR=emar
LD=emcc
######### Configurations defining feature set #########
# Use "make target DRACO_CONFIG=full|limited" to set the desired configuration
# Select the correct version based on the input flags.
DRACO_CONFIG ?= full
# Full config - all features included.
DRACO_FULL_MESH_CONFIG_DEFINES := -DDRACO_MESH_COMPRESSION_SUPPORTED
DRACO_FULL_MESH_CONFIG_DEFINES += -DDRACO_STANDARD_EDGEBREAKER_SUPPORTED
DRACO_FULL_MESH_CONFIG_DEFINES += -DDRACO_PREDICTIVE_EDGEBREAKER_SUPPORTED
DRACO_FULL_POINT_CLOUD_CONFIG_DEFINES := -DDRACO_POINT_CLOUD_COMPRESSION_SUPPORTED
DRACO_FULL_CONFIG_DEFINES := $(DRACO_FULL_MESH_CONFIG_DEFINES)
DRACO_FULL_CONFIG_DEFINES += $(DRACO_FULL_POINT_CLOUD_CONFIG_DEFINES)
# Default limited config with only some core features enabled.
DRACO_LIMITED_CONFIG_DEFINES := -DDRACO_STANDARD_EDGEBREAKER_SUPPORTED
DRACO_LIMITED_CONFIG_DEFINES += -DDRACO_POINT_CLOUD_COMPRESSION_SUPPORTED
DRACO_LIMITED_CONFIG_DEFINES += -DDRACO_MESH_COMPRESSION_SUPPORTED
ifeq ($(DRACO_CONFIG), limited)
DRACO_CONFIG_DEFINES := $(DRACO_LIMITED_CONFIG_DEFINES)
else ifeq ($(DRACO_CONFIG), full_mesh)
DRACO_CONFIG_DEFINES := $(DRACO_FULL_MESH_CONFIG_DEFINES)
else ifeq ($(DRACO_CONFIG), full_point_cloud)
DRACO_CONFIG_DEFINES := $(DRACO_FULL_POINT_CLOUD_CONFIG_DEFINES)
else
DRACO_CONFIG_DEFINES := $(DRACO_FULL_CONFIG_DEFINES)
endif
DRACO_CONFIG_DEFINES += -DDRACO_ATTRIBUTE_DEDUPLICATION_SUPPORTED
#########
DEFINES := $(DRACO_CONFIG_DEFINES)
INCLUDES := -I../../ -I./ -I./src/
SRCDIR := src/draco
OBJDIR := obj
LIBDIR := libs
IDL := $(SRCDIR)/javascript/emscripten/draco_web_encoder.idl
BINDER := $(EMSCRIPTEN)/tools/webidl_binder.py
# In order to open an input mesh file with test_mesh_encoder, you need to add
# the mesh here. Then you need to add the test_mesh_encoder command line
# arguments to the generated html file. E.g.
# arguments: ["-m","1","-q","9", "-noerror","-no3rdparty","-f","cube.obj"],
#MESH_FILE := --preload-file cube.obj
MESH_FILE :=
ALL_C_OPTS := -std=c++11
# Options to reduce JavaScript size.
#ALL_C_OPTS += -Oz -s NO_FILESYSTEM=1 -s DISABLE_EXCEPTION_CATCHING=1
#ALL_C_OPTS += -s USE_SDL=0 -s USE_SDL_IMAGE=0 -s USE_SDL_TTF=0
# Options for speed.
ALL_C_OPTS += -O3
ALL_C_OPTS += -s NO_FILESYSTEM=1 -s ELIMINATE_DUPLICATE_FUNCTIONS=1
ALL_C_OPTS += -s EXPORTED_RUNTIME_METHODS=[]
ALL_C_OPTS += -s PRECISE_F32=1
# Option to get about a 10% speed increase at the cost of about 10% in size.
# Use "make target DRACO_PERFORMANCE_TYPE=extra_speed"
ifeq ($(DRACO_PERFORMANCE_TYPE), extra_speed)
ALL_C_OPTS += --llvm-lto 1
endif
# Options for debug
#ALL_C_OPTS += -g -s DEMANGLE_SUPPORT=1
# If you use -s ALLOW_MEMORY_GROWTH=1 it may turn off some optimizations which
# will hurt performance.
ALL_C_OPTS += -s ALLOW_MEMORY_GROWTH=1
#ALL_C_OPTS += -s TOTAL_MEMORY=67108864
# Export the main module as "DracoEncoderModule".
ALL_C_OPTS += -s MODULARIZE=1 -s EXPORT_NAME="'DracoEncoderModule'"
# Do not create a .mem file.
ALL_C_OPTS += --memory-init-file 0
# Options to separate asm.js and mem file.
#ALL_C_OPTS += --separate-asm --memory-init-file 1
# Options to output WebAssembly code.
# Use "make target DRACO_BUILD_TYPE=wasm"
ifeq ($(DRACO_BUILD_TYPE), wasm)
ALL_C_OPTS += -s WASM=1 -s BINARYEN_IMPRECISE=1
endif
CFLAGS := $(ALL_C_OPTS)
CXXFLAGS := $(ALL_C_OPTS)
CFLAGS += -Wno-sign-compare -fno-omit-frame-pointer
CXXFLAGS += -Wno-sign-compare -fno-omit-frame-pointer
ALL_CXXFLAGS := -MMD -MP $(DEFINES) $(INCLUDES) $(CXXFLAGS)
DATA_BUFFER_A := libdata_buffer.a
DATA_BUFFER_OBJS := core/data_buffer.o
QUANTIZATION_UTILS_A := libquantization_utils.a
QUANTIZATION_UTILS_OBJS := core/quantization_utils.o
CYCLE_TIMER_A := libcycle_timer.a
CYCLE_TIMER_OBJS := core/cycle_timer.o
ENCODER_BUFFER_A := libencoder_buffer.a
ENCODER_BUFFER_OBJS := core/encoder_buffer.o
DECODER_BUFFER_A := libdecoder_buffer.a
DECODER_BUFFER_OBJS := core/decoder_buffer.o
RANS_BIT_DECODER_A := librans_bit_decoder.a
RANS_BIT_DECODER_OBJS := core/divide.o core/bit_coders/rans_bit_decoder.o
RANS_BIT_ENCODER_A := librans_bit_encoder.a
RANS_BIT_ENCODER_OBJS := core/divide.o core/bit_coders/rans_bit_encoder.o
ADAPTIVE_RANS_BIT_DECODER_A := libadaptive_rans_bit_decoder.a
ADAPTIVE_RANS_BIT_DECODER_OBJS := core/bit_coders/adaptive_rans_bit_decoder.o
ADAPTIVE_RANS_BIT_ENCODER_A := libadaptive_rans_bit_encoder.a
ADAPTIVE_RANS_BIT_ENCODER_OBJS := core/bit_coders/adaptive_rans_bit_encoder.o
CORNER_TABLE_A := libcorner_table.a
CORNER_TABLE_OBJS := mesh/corner_table.o
SHANNON_ENTROPY_A := libshannon_entropy.a
SHANNON_ENTROPY_OBJS := core/shannon_entropy.o
SYMBOL_CODING_A := libsymbol_coding.a
SYMBOL_CODING_OBJS := \
core/symbol_decoding.o core/symbol_encoding.o core/symbol_coding_utils.o
DIRECT_BIT_DECODER_A := libdirect_bit_decoder.a
DIRECT_BIT_DECODER_OBJS := core/bit_coders/direct_bit_decoder.o
DIRECT_BIT_ENCODER_A := libdirect_bit_encoder.a
DIRECT_BIT_ENCODER_OBJS := core/bit_coders/direct_bit_encoder.o
DRACO_TYPES_A := libdraco_types.a
DRACO_TYPES_OBJS := core/draco_types.o
METADATA_A :=metadata/metadata.a
METADATA_OBJS :=metadata/metadata.o
GEOMETRY_METADATA_A :=metadata/geometry_metadata.a
GEOMETRY_METADATA_OBJS :=metadata/geometry_metadata.o
METADATA_ENCODER_A :=metadata/metadata_encoder.a
METADATA_ENCODER_OBJS :=metadata/metadata_encoder.o
METADATA_DECODER_A :=metadata/metadata_decoder.a
METADATA_DECODER_OBJS :=metadata/metadata_decoder.o
GEOMETRY_ATTRIBUTE_A := geometry_attribute.a
GEOMETRY_ATTRIBUTE_OBJS := attributes/geometry_attribute.o
POINT_ATTRIBUTE_A := point_attribute.a
POINT_ATTRIBUTE_OBJS := attributes/point_attribute.o
ATTRIBUTE_OCTAHEDRON_TRANSFORM_A := attribute_octahedron_transform.a
ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJS := attributes/attribute_octahedron_transform.o
ATTRIBUTE_QUANTIZATION_TRANSFORM_A := attribute_quantization_transform.a
ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJS := attributes/attribute_quantization_transform.o
ATTRIBUTE_TRANSFORM_A := attribute_transform.a
ATTRIBUTE_TRANSFORM_OBJS := attributes/attribute_transform.o
POINT_CLOUD_A := point_cloud.a
POINT_CLOUD_OBJS := point_cloud/point_cloud.o
MESH_A := libmesh.a
MESH_OBJS := mesh/mesh.o
OPTIONS_A := options.a
OPTIONS_OBJS := core/options.o
POINT_CLOUD_ENCODER_BASE_A := point_cloud_encoder_base.a
POINT_CLOUD_ENCODER_BASE_OBJS := compression/attributes/attributes_encoder.o
POINT_CLOUD_ENCODER_BASE_OBJS += compression/point_cloud/point_cloud_encoder.o
POINT_CLOUD_DECODER_BASE_A := point_cloud_decoder_base.a
POINT_CLOUD_DECODER_BASE_OBJS := compression/attributes/attributes_decoder.o
POINT_CLOUD_DECODER_BASE_OBJS += compression/point_cloud/point_cloud_decoder.o
MESH_ENCODER_BASE_A := mesh_encoder_base.a
MESH_ENCODER_BASE_OBJS := compression/mesh/mesh_encoder.o
MESH_DECODER_BASE_A := mesh_decoder_base.a
MESH_DECODER_BASE_OBJS := compression/mesh/mesh_decoder.o
SEQUENTIAL_ATTRIBUTE_ENCODER_A := sequential_attribute_encoder.a
SEQUENTIAL_ATTRIBUTE_ENCODER_OBJS := \
compression/attributes/sequential_attribute_encoder.o
SEQUENTIAL_ATTRIBUTE_DECODER_A := sequential_attribute_decoder.a
SEQUENTIAL_ATTRIBUTE_DECODER_OBJS := \
compression/attributes/sequential_attribute_decoder.o
SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_A := \
sequential_integer_attribute_encoder.a
SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJS := \
compression/attributes/sequential_integer_attribute_encoder.o
SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_A := \
sequential_integer_attribute_decoder.a
SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJS := \
compression/attributes/sequential_integer_attribute_decoder.o
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_A := \
sequential_quantization_attribute_encoder.a
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJS := \
compression/attributes/sequential_quantization_attribute_encoder.o
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_A := \
sequential_quantization_attribute_decoder.a
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJS := \
compression/attributes/sequential_quantization_attribute_decoder.o
KD_TREE_ATTRIBUTES_ENCODER_A := kd_tree_attributes_encoder.a
KD_TREE_ATTRIBUTES_ENCODER_OBJS := \
compression/attributes/kd_tree_attributes_encoder.o
KD_TREE_ATTRIBUTES_DECODER_A := kd_tree_attributes_decoder.a
KD_TREE_ATTRIBUTES_DECODER_OBJS := \
compression/attributes/kd_tree_attributes_decoder.o
SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_A := \
sequential_normal_attribute_encoder.a
SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJS := \
compression/attributes/sequential_normal_attribute_encoder.o
SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_A := \
sequential_normal_attribute_decoder.a
SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJS := \
compression/attributes/sequential_normal_attribute_decoder.o
SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_A := \
sequential_attribute_encoders_controller.a
SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJS := \
compression/attributes/sequential_attribute_encoders_controller.o
SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_A := \
sequential_attribute_decoders_controller.a
SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJS := \
compression/attributes/sequential_attribute_decoders_controller.o
PREDICTION_SCHEME_ENCODER_FACTORY_A := \
prediction_scheme_encoder_factory.a
PREDICTION_SCHEME_ENCODER_FACTORY_OBJS := \
compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.o
POINT_CLOUD_SEQUENTIAL_ENCODER_A := point_cloud_sequential_encoder.a
POINT_CLOUD_SEQUENTIAL_ENCODER_OBJS := \
compression/point_cloud/point_cloud_sequential_encoder.o
POINT_CLOUD_SEQUENTIAL_DECODER_A := point_cloud_sequential_decoder.a
POINT_CLOUD_SEQUENTIAL_DECODER_OBJS := \
compression/point_cloud/point_cloud_sequential_decoder.o
POINT_CLOUD_KD_TREE_ENCODER_A := point_cloud_kd_tree_encoder.a
POINT_CLOUD_KD_TREE_ENCODER_OBJS := \
compression/point_cloud/point_cloud_kd_tree_encoder.o
POINT_CLOUD_KD_TREE_DECODER_A := point_cloud_kd_tree_decoder.a
POINT_CLOUD_KD_TREE_DECODER_OBJS := \
compression/point_cloud/point_cloud_kd_tree_decoder.o
MESH_SEQUENTIAL_ENCODER_A := mesh_sequential_encoder.a
MESH_SEQUENTIAL_ENCODER_OBJS := compression/mesh/mesh_sequential_encoder.o
MESH_SEQUENTIAL_DECODER_A := mesh_sequential_decoder.a
MESH_SEQUENTIAL_DECODER_OBJS := compression/mesh/mesh_sequential_decoder.o
MESH_EDGEBREAKER_ENCODER_A := mesh_edgebreaker_encoder.a
MESH_EDGEBREAKER_ENCODER_OBJS := compression/mesh/mesh_edgebreaker_encoder.o
MESH_EDGEBREAKER_ENCODER_OBJS += \
compression/mesh/mesh_edgebreaker_encoder_impl.o
MESH_EDGEBREAKER_DECODER_A := mesh_edgebreaker_encoder.a
MESH_EDGEBREAKER_DECODER_OBJS := compression/mesh/mesh_edgebreaker_decoder.o
MESH_EDGEBREAKER_DECODER_OBJS += \
compression/mesh/mesh_edgebreaker_decoder_impl.o
ENCODE_A := encode.a
ENCODE_OBJS := compression/encode.o
ENCODE_A := expert_encode.a
EXPERT_ENCODE_OBJS := compression/expert_encode.o
DECODE_A := decode.a
DECODE_OBJS := compression/decode.o
OBJ_DECODER_A := libobj_decoder.a
OBJ_DECODER_OBJS := io/obj_decoder.o
PLY_DECODER_A := libply_decoder.a
PLY_DECODER_OBJS := core/hash_utils.o io/ply_decoder.o
PLY_ENCODER_A := libply_encoder.a
PLY_ENCODER_OBJS := io/ply_encoder.o
MESH_IO_A := libmesh_io.a
MESH_IO_OBJS := io/mesh_io.o
MESH_ATTRIBUTE_CORNER_TABLE_A := libmesh_attribute_corner_table.a
MESH_ATTRIBUTE_CORNER_TABLE_OBJS := mesh/mesh_attribute_corner_table.o
MESH_MISC_A := libmesh_misc.a
MESH_MISC_OBJS := mesh/mesh_misc_functions.o
FLOAT_POINTS_TREE_DECODER_A := \
libfloat_points_tree_decoder.a
FLOAT_POINTS_TREE_DECODER_OBJS := \
compression/point_cloud/algorithms/float_points_tree_decoder.o
FLOAT_POINTS_TREE_ENCODER_A := \
libfloat_points_tree_encoder.a
FLOAT_POINTS_TREE_ENCODER_OBJS := \
compression/point_cloud/algorithms/float_points_tree_encoder.o
DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_A := \
libdynamic_integer_points_kd_tree_decoder.a
DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJS := \
compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.o
DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_A := \
libdynamic_integer_points_kd_tree_encoder.a
DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJS := \
compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.o
CORNER_TABLE_OBJSA := $(addprefix $(OBJDIR)/,$(CORNER_TABLE_OBJS:.o=_a.o))
SHANNON_ENTROPY_OBJSA := $(addprefix $(OBJDIR)/,$(SHANNON_ENTROPY_OBJS:.o=_a.o))
SYMBOL_CODING_OBJSA := $(addprefix $(OBJDIR)/,$(SYMBOL_CODING_OBJS:.o=_a.o))
DIRECT_BIT_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(DIRECT_BIT_DECODER_OBJS:.o=_a.o))
DIRECT_BIT_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(DIRECT_BIT_ENCODER_OBJS:.o=_a.o))
DECODER_BUFFER_OBJSA := $(addprefix $(OBJDIR)/,$(DECODER_BUFFER_OBJS:.o=_a.o))
DATA_BUFFER_OBJSA := $(addprefix $(OBJDIR)/,$(DATA_BUFFER_OBJS:.o=_a.o))
DRACO_TYPES_OBJSA := $(addprefix $(OBJDIR)/,$(DRACO_TYPES_OBJS:.o=_a.o))
METADATA_OBJSA := \
$(addprefix $(OBJDIR)/,$(METADATA_OBJS:.o=_a.o))
GEOMETRY_METADATA_OBJSA := \
$(addprefix $(OBJDIR)/,$(GEOMETRY_METADATA_OBJS:.o=_a.o))
METADATA_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(METADATA_ENCODER_OBJS:.o=_a.o))
METADATA_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(METADATA_DECODER_OBJS:.o=_a.o))
GEOMETRY_ATTRIBUTE_OBJSA := \
$(addprefix $(OBJDIR)/,$(GEOMETRY_ATTRIBUTE_OBJS:.o=_a.o))
POINT_ATTRIBUTE_OBJSA := $(addprefix $(OBJDIR)/,$(POINT_ATTRIBUTE_OBJS:.o=_a.o))
ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJSA := $(addprefix $(OBJDIR)/,$(ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJS:.o=_a.o))
ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJSA := $(addprefix $(OBJDIR)/,$(ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJS:.o=_a.o))
ATTRIBUTE_TRANSFORM_OBJSA := $(addprefix $(OBJDIR)/,$(ATTRIBUTE_TRANSFORM_OBJS:.o=_a.o))
POINT_CLOUD_OBJSA := $(addprefix $(OBJDIR)/,$(POINT_CLOUD_OBJS:.o=_a.o))
MESH_OBJSA := $(addprefix $(OBJDIR)/,$(MESH_OBJS:.o=_a.o))
OPTIONS_OBJSA := $(addprefix $(OBJDIR)/,$(OPTIONS_OBJS:.o=_a.o))
POINT_CLOUD_ENCODER_BASE_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_ENCODER_BASE_OBJS:.o=_a.o))
POINT_CLOUD_DECODER_BASE_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_DECODER_BASE_OBJS:.o=_a.o))
MESH_ENCODER_BASE_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_ENCODER_BASE_OBJS:.o=_a.o))
MESH_DECODER_BASE_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_DECODER_BASE_OBJS:.o=_a.o))
SEQUENTIAL_ATTRIBUTE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(SEQUENTIAL_ATTRIBUTE_ENCODER_OBJS:.o=_a.o))
SEQUENTIAL_ATTRIBUTE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(SEQUENTIAL_ATTRIBUTE_DECODER_OBJS:.o=_a.o))
SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJS:.o=_a.o))
PREDICTION_SCHEME_ENCODER_FACTORY_OBJSA := \
$(addprefix $(OBJDIR)/,$(PREDICTION_SCHEME_ENCODER_FACTORY_OBJS:.o=_a.o))
SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJS:.o=_a.o))
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJS:.o=_a.o))
SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJS:.o=_a.o))
KD_TREE_ATTRIBUTES_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/, $(KD_TREE_ATTRIBUTES_ENCODER_OBJS:.o=_a.o))
KD_TREE_ATTRIBUTES_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/, $(KD_TREE_ATTRIBUTES_DECODER_OBJS:.o=_a.o))
SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJS:.o=_a.o))
SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJS:.o=_a.o))
SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJS:.o=_a.o))
SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJSA := \
$(addprefix $(OBJDIR)/, \
$(SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJS:.o=_a.o))
POINT_CLOUD_SEQUENTIAL_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_SEQUENTIAL_ENCODER_OBJS:.o=_a.o))
POINT_CLOUD_SEQUENTIAL_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_SEQUENTIAL_DECODER_OBJS:.o=_a.o))
POINT_CLOUD_KD_TREE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_KD_TREE_ENCODER_OBJS:.o=_a.o))
POINT_CLOUD_KD_TREE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(POINT_CLOUD_KD_TREE_DECODER_OBJS:.o=_a.o))
MESH_SEQUENTIAL_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_SEQUENTIAL_ENCODER_OBJS:.o=_a.o))
MESH_SEQUENTIAL_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_SEQUENTIAL_DECODER_OBJS:.o=_a.o))
MESH_EDGEBREAKER_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_EDGEBREAKER_ENCODER_OBJS:.o=_a.o))
MESH_EDGEBREAKER_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_EDGEBREAKER_DECODER_OBJS:.o=_a.o))
ENCODE_OBJSA := $(addprefix $(OBJDIR)/,$(ENCODE_OBJS:.o=_a.o))
EXPERT_ENCODE_OBJSA := $(addprefix $(OBJDIR)/,$(EXPERT_ENCODE_OBJS:.o=_a.o))
DECODE_OBJSA := $(addprefix $(OBJDIR)/,$(DECODE_OBJS:.o=_a.o))
MESH_MISC_OBJSA := $(addprefix $(OBJDIR)/,$(MESH_MISC_OBJS:.o=_a.o))
MESH_ATTRIBUTE_CORNER_TABLE_OBJSA := \
$(addprefix $(OBJDIR)/,$(MESH_ATTRIBUTE_CORNER_TABLE_OBJS:.o=_a.o))
QUANTIZATION_UTILS_OBJSA := \
$(addprefix $(OBJDIR)/,$(QUANTIZATION_UTILS_OBJS:.o=_a.o))
CYCLE_TIMER_OBJSA := $(addprefix $(OBJDIR)/,$(CYCLE_TIMER_OBJS:.o=_a.o))
ENCODER_BUFFER_OBJSA := $(addprefix $(OBJDIR)/,$(ENCODER_BUFFER_OBJS:.o=_a.o))
RANS_BIT_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(RANS_BIT_DECODER_OBJS:.o=_a.o))
RANS_BIT_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(RANS_BIT_ENCODER_OBJS:.o=_a.o))
ADAPTIVE_RANS_BIT_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(ADAPTIVE_RANS_BIT_DECODER_OBJS:.o=_a.o))
ADAPTIVE_RANS_BIT_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(ADAPTIVE_RANS_BIT_ENCODER_OBJS:.o=_a.o))
OBJ_DECODER_OBJSA := $(addprefix $(OBJDIR)/,$(OBJ_DECODER_OBJS:.o=_a.o))
MESH_IO_OBJSA := $(addprefix $(OBJDIR)/,$(MESH_IO_OBJS:.o=_a.o))
PLY_ENCODER_OBJSA := $(addprefix $(OBJDIR)/,$(PLY_ENCODER_OBJS:.o=_a.o))
PLY_DECODER_OBJSA := $(addprefix $(OBJDIR)/,$(PLY_DECODER_OBJS:.o=_a.o))
FLOAT_POINTS_TREE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(FLOAT_POINTS_TREE_DECODER_OBJS:.o=_a.o))
FLOAT_POINTS_TREE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(FLOAT_POINTS_TREE_ENCODER_OBJS:.o=_a.o))
DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJS:.o=_a.o))
DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJSA := \
$(addprefix $(OBJDIR)/,$(DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJS:.o=_a.o))
# Core objs
DRACO_CORE_OBJSA := $(DRACO_TYPES_OBJSA)
DRACO_CORE_OBJSA += $(DIRECT_BIT_DECODER_OBJSA)
DRACO_CORE_OBJSA += $(DIRECT_BIT_ENCODER_OBJSA)
DRACO_CORE_OBJSA += $(RANS_BIT_DECODER_OBJSA)
DRACO_CORE_OBJSA += $(RANS_BIT_ENCODER_OBJSA)
DRACO_CORE_OBJSA += $(ADAPTIVE_RANS_BIT_DECODER_OBJSA)
DRACO_CORE_OBJSA += $(ADAPTIVE_RANS_BIT_ENCODER_OBJSA)
# Shared objs needed for both encoder and decoder
DRACO_SHARED_OBJSA := $(CORNER_TABLE_OBJSA) $(SYMBOL_CODING_OBJSA)
DRACO_SHARED_OBJSA += $(SHANNON_ENTROPY_OBJSA)
DRACO_SHARED_OBJSA += $(DATA_BUFFER_OBJSA) $(DRACO_CORE_OBJSA)
DRACO_SHARED_OBJSA += $(GEOMETRY_ATTRIBUTE_OBJSA)
DRACO_SHARED_OBJSA += $(POINT_ATTRIBUTE_OBJSA)
DRACO_SHARED_OBJSA += $(ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJSA)
DRACO_SHARED_OBJSA += $(ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJSA)
DRACO_SHARED_OBJSA += $(ATTRIBUTE_TRANSFORM_OBJSA)
DRACO_SHARED_OBJSA += $(POINT_CLOUD_OBJSA)
DRACO_SHARED_OBJSA += $(MESH_OBJSA)
DRACO_SHARED_OBJSA += $(MESH_MISC_OBJSA) $(MESH_ATTRIBUTE_CORNER_TABLE_OBJSA)
DRACO_SHARED_OBJSA += $(METADATA_OBJSA)
DRACO_SHARED_OBJSA += $(GEOMETRY_METADATA_OBJSA)
DRACO_SHARED_OBJSA += $(CYCLE_TIMER_OBJSA)
DRACO_SHARED_OBJSA += $(RANS_BIT_DECODER_OBJSA)
DRACO_SHARED_OBJSA += $(RANS_BIT_ENCODER_OBJSA)
DRACO_SHARED_OBJSA += $(QUANTIZATION_UTILS_OBJSA)
# Encoder specific objs
DRACO_ENCODER_OBJSA := $(OPTIONS_OBJSA)
DRACO_ENCODER_OBJSA += $(POINT_CLOUD_ENCODER_BASE_OBJSA)
DRACO_ENCODER_OBJSA += $(MESH_ENCODER_BASE_OBJSA)
DRACO_ENCODER_OBJSA += $(METADATA_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_ATTRIBUTE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(PREDICTION_SCHEME_ENCODER_FACTORY_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJSA)
DRACO_ENCODER_OBJSA += $(POINT_CLOUD_SEQUENTIAL_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(POINT_CLOUD_KD_TREE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(KD_TREE_ATTRIBUTES_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(FLOAT_POINTS_TREE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(MESH_SEQUENTIAL_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(MESH_EDGEBREAKER_ENCODER_OBJSA)
DRACO_ENCODER_OBJSA += $(ENCODE_OBJSA)
DRACO_ENCODER_OBJSA += $(EXPERT_ENCODE_OBJSA)
DRACO_ENCODER_OBJSA += $(ENCODER_BUFFER_OBJSA)
# Decoder specific objs
DRACO_DECODER_OBJSA := $(DECODER_BUFFER_OBJSA)
DRACO_DECODER_OBJSA += $(POINT_CLOUD_DECODER_BASE_OBJSA)
DRACO_DECODER_OBJSA += $(MESH_DECODER_BASE_OBJSA)
DRACO_DECODER_OBJSA += $(METADATA_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_ATTRIBUTE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJSA)
DRACO_DECODER_OBJSA += $(POINT_CLOUD_SEQUENTIAL_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(POINT_CLOUD_KD_TREE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(KD_TREE_ATTRIBUTES_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(FLOAT_POINTS_TREE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(MESH_SEQUENTIAL_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(MESH_EDGEBREAKER_DECODER_OBJSA)
DRACO_DECODER_OBJSA += $(DECODE_OBJSA)
# I/O objs
DRACO_IO_OBJSA := $(OBJ_DECODER_OBJSA) $(MESH_IO_OBJSA)
DRACO_IO_OBJSA += $(PLY_ENCODER_OBJSA) $(PLY_DECODER_OBJSA)
# All objs
DRACO_OBJSA := $(DRACO_SHARED_OBJSA)
DRACO_OBJSA += $(DRACO_ENCODER_OBJSA)
DRACO_OBJSA += $(DRACO_DECODER_OBJSA)
DRACO_OBJSA += $(DRACO_IO_OBJSA)
OBJSA := $(DRACO_OBJSA)
LIBS := $(LIBDIR)/libmesh_io.a
LIBS += $(LIBDIR)/libply_decoder.a
LIBS += $(LIBDIR)/libply_encoder.a
LIBS += $(LIBDIR)/libobj_decoder.a
LIBS += $(LIBDIR)/libgeometry_attribute.a
LIBS += $(LIBDIR)/libpoint_cloud.a
LIBS += $(LIBDIR)/libpoint_attribute.a
LIBS += $(LIBDIR)/libattribute_octahedron_transform.a
LIBS += $(LIBDIR)/libattribute_quantization_transform.a
LIBS += $(LIBDIR)/libattribute_transform.a
LIBS += $(LIBDIR)/liboptions.a
LIBS += $(LIBDIR)/libencode.a
LIBS += $(LIBDIR)/libexpert_encode.a
LIBS += $(LIBDIR)/libdecode.a
LIBS += $(LIBDIR)/libmesh.a
LIBS += $(LIBDIR)/libmesh_decoder_base.a
LIBS += $(LIBDIR)/libpoint_cloud_sequential_decoder.a
LIBS += $(LIBDIR)/libpoint_cloud_kd_tree_decoder.a
LIBS += $(LIBDIR)/libkd_tree_attributes_decoder.a
LIBS += $(LIBDIR)/libmesh_sequential_decoder.a
LIBS += $(LIBDIR)/libmesh_edgebreaker_decoder.a
LIBS += $(LIBDIR)/libsequential_attribute_decoders_controller.a
LIBS += $(LIBDIR)/libpoint_cloud_decoder_base.a
LIBS += $(LIBDIR)/libsequential_integer_attribute_decoder.a
LIBS += $(LIBDIR)/libsequential_attribute_decoder.a
LIBS += $(LIBDIR)/libsequential_quantization_attribute_decoder.a
LIBS += $(LIBDIR)/libsequential_normal_attribute_decoder.a
LIBS += $(LIBDIR)/libquantization_utils.a
LIBS += $(LIBDIR)/libmesh_encoder_base.a
LIBS += $(LIBDIR)/libpoint_cloud_sequential_encoder.a
LIBS += $(LIBDIR)/libpoint_cloud_kd_tree_encoder.a
LIBS += $(LIBDIR)/libkd_tree_attributes_encoder.a
LIBS += $(LIBDIR)/libmesh_sequential_encoder.a
LIBS += $(LIBDIR)/libmesh_edgebreaker_encoder.a
LIBS += $(LIBDIR)/libsequential_attribute_encoder.a
LIBS += $(LIBDIR)/libsequential_attribute_encoders_controller.a
LIBS += $(LIBDIR)/libpoint_cloud_encoder_base.a
LIBS += $(LIBDIR)/libsequential_integer_attribute_encoder.a
LIBS += $(LIBDIR)/libsequential_quantization_attribute_encoder.a
LIBS += $(LIBDIR)/libsequential_normal_attribute_encoder.a
LIBS += $(LIBDIR)/libcorner_table.a
LIBS += $(LIBDIR)/libmesh_attribute_corner_table.a
LIBS += $(LIBDIR)/libmesh_misc.a
LIBS += $(LIBDIR)/libshannon_entropy.a
LIBS += $(LIBDIR)/libsymbol_coding.a
LIBS += $(LIBDIR)/librans_bit_decoder.a
LIBS += $(LIBDIR)/librans_bit_encoder.a
LIBS += $(LIBDIR)/libdata_buffer.a
LIBS += $(LIBDIR)/libdraco_types.a
LIBS += $(LIBDIR)/libmetadata.a
LIBS += $(LIBDIR)/libgeometry_metadata.a
LIBS += $(LIBDIR)/libmetadata_encoder.a
LIBS += $(LIBDIR)/libmetadata_decoder.a
LIBS += $(LIBDIR)/libdecoder_buffer.a
LIBS += $(LIBDIR)/libencoder_buffer.a
LIBS += $(LIBDIR)/libcycle_timer.a
POINTS_LIBS := $(LIBDIR)/libfloat_points_tree_decoder.a
POINTS_LIBS += $(LIBDIR)/libfloat_points_tree_encoder.a
POINTS_LIBS += $(LIBDIR)/libdynamic_integer_points_kd_tree_decoder.a
POINTS_LIBS += $(LIBDIR)/libdynamic_integer_points_kd_tree_encoder.a
POINTS_LIBS += $(LIBDIR)/libdirect_bit_decoder.a
POINTS_LIBS += $(LIBDIR)/libdirect_bit_encoder.a
POINTS_LIBS += $(LIBDIR)/libadaptive_rans_bit_decoder.a
POINTS_LIBS += $(LIBDIR)/libadaptive_rans_bit_encoder.a
DEPS := $(DRACO_OBJSA:_a.o=.d)
CLEAN := $(DEPS) $(OBJSA) $(LIBS) $(POINTS_LIBS)
CLEAN += glue_encoder.cpp glue_encoder.js draco_encoder.js WebIDLGrammar.pkl parser.out
CLEAN += $(OBJDIR)/javascript/emscripten/draco_encoder_glue_wrapper.o $(OBJDIR)/javascript/emscripten/draco_encoder_glue_wrapper.d
CLEAN += $(OBJDIR)/javascript/emscripten/encoder_webidl_wrapper.o $(OBJDIR)/javascript/emscripten/encoder_webidl_wrapper.d
all: jslib
jslib: build_glue draco_encoder
build_glue:
python $(BINDER) $(IDL) glue_encoder
draco_encoder: $(OBJDIR)/javascript/emscripten/draco_encoder_glue_wrapper.o $(OBJDIR)/javascript/emscripten/encoder_webidl_wrapper.o $(DRACO_CORE_OBJSA) $(DRACO_SHARED_OBJSA) $(DRACO_ENCODER_OBJSA)
$(CXX) $(ALL_C_OPTS) $^ --pre-js $(SRCDIR)/javascript/emscripten/prepareCallbacks.js --pre-js $(SRCDIR)/javascript/emscripten/version.js --post-js glue_encoder.js --post-js $(SRCDIR)/javascript/emscripten/finalize.js -o $@.js
$(LIBDIR)/libcorner_table.a: $(CORNER_TABLE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libshannon_entropy.a: $(SHANNON_ENTROPY_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsymbol_coding.a: $(SYMBOL_CODING_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdirect_bit_decoder.a: $(DIRECT_BIT_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdirect_bit_encoder.a: $(DIRECT_BIT_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdecoder_buffer.a: $(DECODER_BUFFER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdata_buffer.a: $(DATA_BUFFER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdraco_types.a: $(DRACO_TYPES_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmetadata.a: $(MEATDATA_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libgeometry_metadata.a: $(GEOMETRY_MEATDATA_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmetadata_encoder.a: $(MEATDATA_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmetadata_decoder.a: $(MEATDATA_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libgeometry_attribute.a: $(GEOMETRY_ATTRIBUTE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_attribute.a: $(POINT_ATTRIBUTE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libattribute_octahedron_transform.a: $(ATTRIBUTE_OCTAHEDRON_TRANSFORM_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libattribute_quantization_transform.a: $(ATTRIBUTE_QUANTIZATION_TRANSFORM_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libattribute_transform.a: $(ATTRIBUTE_TRANSFORM_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud.a: $(POINT_CLOUD_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh.a: $(MESH_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/liboptions.a: $(OPTIONS_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_encoder_base.a: $(POINT_CLOUD_ENCODER_BASE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_decoder_base.a: $(POINT_CLOUD_DECODER_BASE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_encoder_base.a: $(MESH_ENCODER_BASE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_decoder_base.a: $(MESH_DECODER_BASE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_attribute_encoder.a: \
$(SEQUENTIAL_ATTRIBUTE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_attribute_decoder.a: \
$(SEQUENTIAL_ATTRIBUTE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_integer_attribute_encoder.a: \
$(SEQUENTIAL_INTEGER_ATTRIBUTE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpredicion_scheme_encoder_factory.a: \
$(PREDICTION_SCHEME_ENCODER_FACTORY_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_integer_attribute_decoder.a: \
$(SEQUENTIAL_INTEGER_ATTRIBUTE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_quantization_attribute_encoder.a: \
$(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_quantization_attribute_decoder.a: \
$(SEQUENTIAL_QUANTIZATION_ATTRIBUTE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libkd_tree_attributes_encoder.a: $(KD_TREE_ATTRIBUTES_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libkd_tree_attributes_decoder.a: $(KD_TREE_ATTRIBUTES_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_normal_attribute_encoder.a: \
$(SEQUENTIAL_NORMAL_ATTRIBUTE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_normal_attribute_decoder.a: \
$(SEQUENTIAL_NORMAL_ATTRIBUTE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_attribute_encoders_controller.a: \
$(SEQUENTIAL_ATTRIBUTE_ENCODERS_CONTROLLER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libsequential_attribute_decoders_controller.a: \
$(SEQUENTIAL_ATTRIBUTE_DECODERS_CONTROLLER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_sequential_encoder.a: \
$(POINT_CLOUD_SEQUENTIAL_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_sequential_decoder.a: \
$(POINT_CLOUD_SEQUENTIAL_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_kd_tree_encoder.a: \
$(POINT_CLOUD_KD_TREE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libpoint_cloud_kd_tree_decoder.a: \
$(POINT_CLOUD_KD_TREE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_sequential_encoder.a: $(MESH_SEQUENTIAL_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_sequential_decoder.a: $(MESH_SEQUENTIAL_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_edgebreaker_encoder.a: $(MESH_EDGEBREAKER_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_edgebreaker_decoder.a: $(MESH_EDGEBREAKER_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libencode.a: $(ENCODE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libencode.a: $(EXPERT_ENCODE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdecode.a: $(DECODE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_misc.a: $(MESH_MISC_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_attribute_corner_table.a: $(MESH_ATTRIBUTE_CORNER_TABLE_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libencoder_buffer.a: $(ENCODER_BUFFER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libquantization_utils.a: $(QUANTIZATION_UTILS_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libcycle_timer.a: $(CYCLE_TIMER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/librans_bit_decoder.a: $(RANS_BIT_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/librans_bit_encoder.a: $(RANS_BIT_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libadaptive_rans_bit_decoder.a: $(ADAPTIVE_RANS_BIT_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libadaptive_rans_bit_encoder.a: $(ADAPTIVE_RANS_BIT_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libobj_decoder.a: $(OBJ_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libmesh_io.a: $(MESH_IO_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libply_encoder.a: $(PLY_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libply_decoder.a: $(PLY_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libfloat_points_tree_decoder.a: $(FLOAT_POINTS_TREE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libfloat_points_tree_encoder.a: $(FLOAT_POINTS_TREE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdynamic_integer_points_kd_tree_decoder.a: \
$(DYNAMIC_INTEGER_POINTS_KD_TREE_DECODER_OBJSA)
$(AR) rcs $@ $^
$(LIBDIR)/libdynamic_integer_points_kd_tree_encoder.a: \
$(DYNAMIC_INTEGER_POINTS_KD_TREE_ENCODER_OBJSA)
$(AR) rcs $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.cc
@mkdir -p $(@D)
$(CXX) $(ALL_CXXFLAGS) $< -o $@
$(OBJDIR)/%_a.o: $(SRCDIR)/%.cc
@mkdir -p $(@D)
$(CXX) $(ALL_CXXFLAGS) $< -o $@
clean:
$(RM) $(CLEAN)

View File

@ -5,6 +5,11 @@
News News
======= =======
### Version 1.3.4 release
* Released Draco Animation code
* Fixes for Unity
* Various file location and name changes
### Version 1.3.3 release ### Version 1.3.3 release
* Added ExpertEncoder to the Javascript API * Added ExpertEncoder to the Javascript API
* Allows developers to set quantization options per attribute id * Allows developers to set quantization options per attribute id
@ -565,7 +570,7 @@ 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. 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 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 know all of your project's memory requirements, you can turn on static memory
by changing `Makefile.emcc` and running `make -f Makefile.emcc`. by changing `CMakeLists.txt` accordingly.
Metadata API Metadata API
------------ ------------

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -1,129 +1,119 @@
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(d,f,n){d!=Array.prototype&&d!=Object.prototype&&(d[f]=n.value)};$jscomp.getGlobal=function(d){return"undefined"!=typeof window&&window===d?d:"undefined"!=typeof global&&null!=global?global:d};$jscomp.global=$jscomp.getGlobal(this); var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(d,k,f){d!=Array.prototype&&d!=Object.prototype&&(d[k]=f.value)};$jscomp.getGlobal=function(d){return"undefined"!=typeof window&&window===d?d:"undefined"!=typeof global&&null!=global?global:d};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.polyfill=function(d,f,n,w){if(f){n=$jscomp.global;d=d.split(".");for(w=0;w<d.length-1;w++){var g=d[w];g in n||(n[g]={});n=n[g]}d=d[d.length-1];w=n[d];f=f(w);f!=w&&null!=f&&$jscomp.defineProperty(n,d,{configurable:!0,writable:!0,value:f})}};$jscomp.polyfill("Math.imul",function(d){return d?d:function(f,d){f=Number(f);d=Number(d);var n=f&65535,g=d&65535;return n*g+((f>>>16&65535)*g+n*(d>>>16&65535)<<16>>>0)|0}},"es6","es3"); $jscomp.polyfill=function(d,k,f,v){if(k){f=$jscomp.global;d=d.split(".");for(v=0;v<d.length-1;v++){var h=d[v];h in f||(f[h]={});f=f[h]}d=d[d.length-1];v=f[d];k=k(v);k!=v&&null!=k&&$jscomp.defineProperty(f,d,{configurable:!0,writable:!0,value:k})}};$jscomp.polyfill("Math.imul",function(d){return d?d:function(d,f){d=Number(d);f=Number(f);var k=d&65535,h=f&65535;return k*h+((d>>>16&65535)*h+k*(f>>>16&65535)<<16>>>0)|0}},"es6","es3");
$jscomp.polyfill("Math.clz32",function(d){return d?d:function(f){f=Number(f)>>>0;if(0===f)return 32;var d=0;0===(f&4294901760)&&(f<<=16,d+=16);0===(f&4278190080)&&(f<<=8,d+=8);0===(f&4026531840)&&(f<<=4,d+=4);0===(f&3221225472)&&(f<<=2,d+=2);0===(f&2147483648)&&d++;return d}},"es6","es3");$jscomp.polyfill("Math.trunc",function(d){return d?d:function(d){d=Number(d);if(isNaN(d)||Infinity===d||-Infinity===d||0===d)return d;var f=Math.floor(Math.abs(d));return 0>d?-f:f}},"es6","es3"); $jscomp.polyfill("Math.clz32",function(d){return d?d:function(d){d=Number(d)>>>0;if(0===d)return 32;var f=0;0===(d&4294901760)&&(d<<=16,f+=16);0===(d&4278190080)&&(d<<=8,f+=8);0===(d&4026531840)&&(d<<=4,f+=4);0===(d&3221225472)&&(d<<=2,f+=2);0===(d&2147483648)&&f++;return f}},"es6","es3");$jscomp.polyfill("Math.trunc",function(d){return d?d:function(d){d=Number(d);if(isNaN(d)||Infinity===d||-Infinity===d||0===d)return d;var f=Math.floor(Math.abs(d));return 0>d?-f:f}},"es6","es3");
$jscomp.SYMBOL_PREFIX="jscomp_symbol_";$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(d){return $jscomp.SYMBOL_PREFIX+(d||"")+$jscomp.symbolCounter_++}; $jscomp.SYMBOL_PREFIX="jscomp_symbol_";$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.Symbol=function(){var d=0;return function(k){return $jscomp.SYMBOL_PREFIX+(k||"")+d++}}();
$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var d=$jscomp.global.Symbol.iterator;d||(d=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[d]&&$jscomp.defineProperty(Array.prototype,d,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(d){var f=0;return $jscomp.iteratorPrototype(function(){return f<d.length?{done:!1,value:d[f++]}:{done:!0}})}; $jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var d=$jscomp.global.Symbol.iterator;d||(d=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[d]&&$jscomp.defineProperty(Array.prototype,d,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(d){var k=0;return $jscomp.iteratorPrototype(function(){return k<d.length?{done:!1,value:d[k++]}:{done:!0}})};
$jscomp.iteratorPrototype=function(d){$jscomp.initSymbolIterator();d={next:d};d[$jscomp.global.Symbol.iterator]=function(){return this};return d};$jscomp.makeIterator=function(d){$jscomp.initSymbolIterator();var f=d[Symbol.iterator];return f?f.call(d):$jscomp.arrayIterator(d)};$jscomp.FORCE_POLYFILL_PROMISE=!1; $jscomp.iteratorPrototype=function(d){$jscomp.initSymbolIterator();d={next:d};d[$jscomp.global.Symbol.iterator]=function(){return this};return d};$jscomp.makeIterator=function(d){$jscomp.initSymbolIterator();var k=d[Symbol.iterator];return k?k.call(d):$jscomp.arrayIterator(d)};$jscomp.FORCE_POLYFILL_PROMISE=!1;
$jscomp.polyfill("Promise",function(d){function f(){this.batch_=null}function n(d){return d instanceof g?d:new g(function(f,D){f(d)})}if(d&&!$jscomp.FORCE_POLYFILL_PROMISE)return d;f.prototype.asyncExecute=function(d){null==this.batch_&&(this.batch_=[],this.asyncExecuteBatch_());this.batch_.push(d);return this};f.prototype.asyncExecuteBatch_=function(){var d=this;this.asyncExecuteFunction(function(){d.executeBatch_()})};var w=$jscomp.global.setTimeout;f.prototype.asyncExecuteFunction=function(d){w(d, $jscomp.polyfill("Promise",function(d){function k(){this.batch_=null}function f(d){return d instanceof h?d:new h(function(r,f){r(d)})}if(d&&!$jscomp.FORCE_POLYFILL_PROMISE)return d;k.prototype.asyncExecute=function(d){null==this.batch_&&(this.batch_=[],this.asyncExecuteBatch_());this.batch_.push(d);return this};k.prototype.asyncExecuteBatch_=function(){var d=this;this.asyncExecuteFunction(function(){d.executeBatch_()})};var v=$jscomp.global.setTimeout;k.prototype.asyncExecuteFunction=function(d){v(d,
0)};f.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var d=this.batch_;this.batch_=[];for(var f=0;f<d.length;++f){var g=d[f];delete d[f];try{g()}catch(la){this.asyncThrow_(la)}}}this.batch_=null};f.prototype.asyncThrow_=function(d){this.asyncExecuteFunction(function(){throw d;})};var g=function(d){this.state_=0;this.result_=void 0;this.onSettledCallbacks_=[];var f=this.createResolveAndReject_();try{d(f.resolve,f.reject)}catch(u){f.reject(u)}};g.prototype.createResolveAndReject_= 0)};k.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var d=this.batch_;this.batch_=[];for(var B=0;B<d.length;++B){var f=d[B];delete d[B];try{f()}catch(w){this.asyncThrow_(w)}}}this.batch_=null};k.prototype.asyncThrow_=function(d){this.asyncExecuteFunction(function(){throw d;})};var h=function(d){this.state_=0;this.result_=void 0;this.onSettledCallbacks_=[];var r=this.createResolveAndReject_();try{d(r.resolve,r.reject)}catch(Y){r.reject(Y)}};h.prototype.createResolveAndReject_=
function(){function d(d){return function(D){g||(g=!0,d.call(f,D))}}var f=this,g=!1;return{resolve:d(this.resolveTo_),reject:d(this.reject_)}};g.prototype.resolveTo_=function(d){if(d===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof g)this.settleSameAsPromise_(d);else{a:switch(typeof d){case "object":var f=null!=d;break a;case "function":f=!0;break a;default:f=!1}f?this.resolveToNonPromiseObj_(d):this.fulfill_(d)}};g.prototype.resolveToNonPromiseObj_=function(d){var f= function(){function d(d){return function(r){h||(h=!0,d.call(f,r))}}var f=this,h=!1;return{resolve:d(this.resolveTo_),reject:d(this.reject_)}};h.prototype.resolveTo_=function(d){if(d===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof h)this.settleSameAsPromise_(d);else{a:switch(typeof d){case "object":var f=null!=d;break a;case "function":f=!0;break a;default:f=!1}f?this.resolveToNonPromiseObj_(d):this.fulfill_(d)}};h.prototype.resolveToNonPromiseObj_=function(d){var f=
void 0;try{f=d.then}catch(u){this.reject_(u);return}"function"==typeof f?this.settleSameAsThenable_(f,d):this.fulfill_(d)};g.prototype.reject_=function(d){this.settle_(2,d)};g.prototype.fulfill_=function(d){this.settle_(1,d)};g.prototype.settle_=function(d,f){if(0!=this.state_)throw Error("Cannot settle("+d+", "+f|"): Promise already settled in state"+this.state_);this.state_=d;this.result_=f;this.executeOnSettledCallbacks_()};g.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var d= void 0;try{f=d.then}catch(Y){this.reject_(Y);return}"function"==typeof f?this.settleSameAsThenable_(f,d):this.fulfill_(d)};h.prototype.reject_=function(d){this.settle_(2,d)};h.prototype.fulfill_=function(d){this.settle_(1,d)};h.prototype.settle_=function(d,f){if(0!=this.state_)throw Error("Cannot settle("+d+", "+f|"): Promise already settled in state"+this.state_);this.state_=d;this.result_=f;this.executeOnSettledCallbacks_()};h.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var d=
this.onSettledCallbacks_,f=0;f<d.length;++f)d[f].call(),d[f]=null;this.onSettledCallbacks_=null}};var ma=new f;g.prototype.settleSameAsPromise_=function(d){var f=this.createResolveAndReject_();d.callWhenSettled_(f.resolve,f.reject)};g.prototype.settleSameAsThenable_=function(d,f){var g=this.createResolveAndReject_();try{d.call(f,g.resolve,g.reject)}catch(la){g.reject(la)}};g.prototype.then=function(d,f){function u(d,f){return"function"==typeof d?function(f){try{n(d(f))}catch(ea){D(ea)}}:f}var n,D, this.onSettledCallbacks_,f=0;f<d.length;++f)d[f].call(),d[f]=null;this.onSettledCallbacks_=null}};var ha=new k;h.prototype.settleSameAsPromise_=function(d){var f=this.createResolveAndReject_();d.callWhenSettled_(f.resolve,f.reject)};h.prototype.settleSameAsThenable_=function(d,f){var h=this.createResolveAndReject_();try{d.call(f,h.resolve,h.reject)}catch(w){h.reject(w)}};h.prototype.then=function(d,f){function k(d,f){return"function"==typeof d?function(f){try{w(d(f))}catch(O){r(O)}}:f}var w,r,B=new h(function(d,
w=new g(function(d,f){n=d;D=f});this.callWhenSettled_(u(d,n),u(f,D));return w};g.prototype.catch=function(d){return this.then(void 0,d)};g.prototype.callWhenSettled_=function(d,f){function g(){switch(n.state_){case 1:d(n.result_);break;case 2:f(n.result_);break;default:throw Error("Unexpected state: "+n.state_);}}var n=this;null==this.onSettledCallbacks_?ma.asyncExecute(g):this.onSettledCallbacks_.push(function(){ma.asyncExecute(g)})};g.resolve=n;g.reject=function(d){return new g(function(f,g){g(d)})}; f){w=d;r=f});this.callWhenSettled_(k(d,w),k(f,r));return B};h.prototype.catch=function(d){return this.then(void 0,d)};h.prototype.callWhenSettled_=function(d,f){function h(){switch(k.state_){case 1:d(k.result_);break;case 2:f(k.result_);break;default:throw Error("Unexpected state: "+k.state_);}}var k=this;null==this.onSettledCallbacks_?ha.asyncExecute(h):this.onSettledCallbacks_.push(function(){ha.asyncExecute(h)})};h.resolve=f;h.reject=function(d){return new h(function(f,h){h(d)})};h.race=function(d){return new h(function(h,
g.race=function(d){return new g(function(f,g){for(var u=$jscomp.makeIterator(d),w=u.next();!w.done;w=u.next())n(w.value).callWhenSettled_(f,g)})};g.all=function(d){var f=$jscomp.makeIterator(d),u=f.next();return u.done?n([]):new g(function(d,g){function w(f){return function(g){D[f]=g;Q--;0==Q&&d(D)}}var D=[],Q=0;do D.push(void 0),Q++,n(u.value).callWhenSettled_(w(D.length-1),g),u=f.next();while(!u.done)})};return g},"es6","es3"); k){for(var w=$jscomp.makeIterator(d),r=w.next();!r.done;r=w.next())f(r.value).callWhenSettled_(h,k)})};h.all=function(d){var k=$jscomp.makeIterator(d),r=k.next();return r.done?f([]):new h(function(d,h){function w(f){return function(h){v[f]=h;B--;0==B&&d(v)}}var v=[],B=0;do v.push(void 0),B++,f(r.value).callWhenSettled_(w(v.length-1),h),r=k.next();while(!r.done)})};return h},"es6","es3");
var DracoDecoderModule=function(d){function f(a,b){a||W("Assertion failed: "+b)}function n(e,b){if(0===b||!e)return"";for(var c=0,l,d=0;;){l=T[e+d>>0];c|=l;if(0==l&&!b)break;d++;if(b&&d==b)break}b||(b=d);l="";if(128>c){for(;0<b;)c=String.fromCharCode.apply(String,T.subarray(e,e+Math.min(b,1024))),l=l?l+c:c,e+=1024,b-=1024;return l}return a.UTF8ToString(e)}function w(a){return a.replace(/__Z[\w\d_]+/g,function(a){return a===a?a:a+" ["+a+"]"})}function g(){a:{var e=Error();if(!e.stack){try{throw Error(0); var DracoDecoderModule=function(d){function k(a,b){b||(b=16);return Math.ceil(a/b)*b}function f(a,b){a||O("Assertion failed: "+b)}function v(a,b){if(0===b||!a)return"";for(var c=0,e,d=0;;){e=W[a+d>>0];c|=e;if(0==e&&!b)break;d++;if(b&&d==b)break}b||(b=d);e="";if(128>c){for(;0<b;)c=String.fromCharCode.apply(String,W.subarray(a,a+Math.min(b,1024))),e=e?e+c:c,a+=1024,b-=1024;return e}return h(W,a)}function h(a,b){for(var c=b;a[c];)++c;if(16<c-b&&a.subarray&&Ia)return Ia.decode(a.subarray(b,c));for(c=
}catch(b){e=b}if(!e.stack){e="(no stack trace available)";break a}}e=e.stack.toString()}a.extraStackTrace&&(e+="\n"+a.extraStackTrace());return w(e)}function ma(a,b){0<a%b&&(a+=b-a%b);return a}function D(){a.HEAP8=fa=new Int8Array(F);a.HEAP16=za=new Int16Array(F);a.HEAP32=x=new Int32Array(F);a.HEAPU8=T=new Uint8Array(F);a.HEAPU16=Oa=new Uint16Array(F);a.HEAPU32=Pa=new Uint32Array(F);a.HEAPF32=Qa=new Float32Array(F);a.HEAPF64=Ra=new Float64Array(F)}function Ma(){var e=a.usingWasm?Aa:Sa,b=2147483648- "";;){var e=a[b++];if(!e)return c;if(e&128){var d=a[b++]&63;if(192==(e&224))c+=String.fromCharCode((e&31)<<6|d);else{var f=a[b++]&63;if(224==(e&240))e=(e&15)<<12|d<<6|f;else{var g=a[b++]&63;if(240==(e&248))e=(e&7)<<18|d<<12|f<<6|g;else{var h=a[b++]&63;if(248==(e&252))e=(e&3)<<24|d<<18|f<<12|g<<6|h;else{var k=a[b++]&63;e=(e&1)<<30|d<<24|f<<18|g<<12|h<<6|k}}}65536>e?c+=String.fromCharCode(e):(e-=65536,c+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else c+=String.fromCharCode(e)}}function ha(a,b){0<
e;if(x[ba>>2]>b)return!1;var c=y;for(y=Math.max(y,ib);y<x[ba>>2];)y=536870912>=y?ma(2*y,e):Math.min(ma((3*y+2147483648)/4,e),b);e=a.reallocBuffer(y);if(!e||e.byteLength!=y)return y=c,!1;a.buffer=F=e;D();return!0}function u(e){for(;0<e.length;){var b=e.shift();if("function"==typeof b)b();else{var c=b.func;"number"===typeof c?void 0===b.arg?a.dynCall_v(c):a.dynCall_vi(c,b.arg):c(void 0===b.arg?null:b.arg)}}}function la(e){ha++;a.monitorRunDependencies&&a.monitorRunDependencies(ha)}function Na(e){ha--; a%b&&(a+=b-a%b);return a}function r(){a.HEAP8=ia=new Int8Array(D);a.HEAP16=Ja=new Int16Array(D);a.HEAP32=E=new Int32Array(D);a.HEAPU8=W=new Uint8Array(D);a.HEAPU16=new Uint16Array(D);a.HEAPU32=new Uint32Array(D);a.HEAPF32=new Float32Array(D);a.HEAPF64=new Float64Array(D)}function B(e){for(;0<e.length;){var b=e.shift();if("function"==typeof b)b();else{var c=b.func;"number"===typeof c?void 0===b.arg?a.dynCall_v(c):a.dynCall_vi(c,b.arg):c(void 0===b.arg?null:b.arg)}}}function Y(a){return String.prototype.startsWith?
a.monitorRunDependencies&&a.monitorRunDependencies(ha);0==ha&&(null!==Ba&&(clearInterval(Ba),Ba=null),sa&&(e=sa,sa=null,e()))}function na(){return!!na.uncaught_exception}function qa(){var e=A.last;if(!e)return(m.setTempRet0(0),0)|0;var b=A.infos[e],c=b.type;if(!c)return(m.setTempRet0(0),e)|0;var l=Array.prototype.slice.call(arguments);a.___cxa_is_pointer_type(c);qa.buffer||(qa.buffer=Ta(4));x[qa.buffer>>2]=e;e=qa.buffer;for(var d=0;d<l.length;d++)if(l[d]&&a.___cxa_can_catch(l[d],c,e))return e=x[e>> a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}function w(){return!!w.uncaught_exception}function la(){var e=y.last;if(!e)return(sa(0),0)|0;var b=y.infos[e],c=b.type;if(!c)return(sa(0),e)|0;var p=Array.prototype.slice.call(arguments);a.___cxa_is_pointer_type(c);la.buffer||(la.buffer=Ka(4));E[la.buffer>>2]=e;e=la.buffer;for(var d=0;d<p.length;d++)if(p[d]&&a.___cxa_can_catch(p[d],c,e))return e=E[e>>2],b.adjusted=e,(sa(p[d]),e)|0;e=E[e>>2];
2],b.adjusted=e,(m.setTempRet0(l[d]),e)|0;e=x[e>>2];return(m.setTempRet0(c),e)|0}function Q(e,b){v.varargs=b;try{var c=v.get(),l=v.get(),d=v.get();e=0;Q.buffer||(Q.buffers=[null,[],[]],Q.printChar=function(b,c){var e=Q.buffers[b];f(e);if(0===c||10===c){b=1===b?a.print:a.printErr;a:{for(var l=c=0;e[l];)++l;if(16<l-c&&e.subarray&&Ua)c=Ua.decode(e.subarray(c,l));else for(l="";;){var d=e[c++];if(!d){c=l;break a}if(d&128){var g=e[c++]&63;if(192==(d&224))l+=String.fromCharCode((d&31)<<6|g);else{var h=e[c++]& return(sa(c),e)|0}function Z(e,b){u.varargs=b;try{var c=u.get(),p=u.get(),d=u.get();e=0;Z.buffers||(Z.buffers=[null,[],[]],Z.printChar=function(b,c){var e=Z.buffers[b];f(e);0===c||10===c?((1===b?a.print:a.printErr)(h(e,0)),e.length=0):e.push(c)});for(b=0;b<d;b++){for(var g=E[p+8*b>>2],k=E[p+(8*b+4)>>2],l=0;l<k;l++)Z.printChar(c,W[g+l]);e+=k}return e}catch(ya){return"undefined"!==typeof FS&&ya instanceof FS.ErrnoError||O(ya),-ya.errno}}function ma(e,b){ma.seen||(ma.seen={});e in ma.seen||(a.dynCall_v(b),
63;if(224==(d&240))d=(d&15)<<12|g<<6|h;else{var E=e[c++]&63;if(240==(d&248))d=(d&7)<<18|g<<12|h<<6|E;else{var k=e[c++]&63;if(248==(d&252))d=(d&3)<<24|g<<18|h<<12|E<<6|k;else{var ta=e[c++]&63;d=(d&1)<<30|g<<24|h<<18|E<<12|k<<6|ta}}}65536>d?l+=String.fromCharCode(d):(d-=65536,l+=String.fromCharCode(55296|d>>10,56320|d&1023))}}else l+=String.fromCharCode(d)}}b(c);e.length=0}else e.push(c)});for(b=0;b<d;b++){for(var h=x[l+8*b>>2],g=x[l+(8*b+4)>>2],k=0;k<g;k++)Q.printChar(c,T[h+k]);e+=g}return e}catch(Ca){return"undefined"!== ma.seen[e]=1)}function na(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}function wa(e){function b(){if(!a.calledRun&&(a.calledRun=!0,!oa)){La||(La=!0,B(Ma));B(Na);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Oa.unshift(a.postRun.shift());B(Oa)}}if(!(0<ea)){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)Pa.unshift(a.preRun.shift());
typeof FS&&Ca instanceof FS.ErrnoError||W(Ca),-Ca.errno}}function ra(e,b){ra.seen||(ra.seen={});e in ra.seen||(a.dynCall_v(b),ra.seen[e]=1)}function ea(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}function Da(e){function b(){if(!a.calledRun&&(a.calledRun=!0,!ua)){Va||(Va=!0,u(Wa));u(Xa);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Ya.unshift(a.postRun.shift()); B(Pa);0<ea||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1);b()},1)):b())}}function O(e){if(a.onAbort)a.onAbort(e);void 0!==e?(a.print(e),a.printErr(e),e=JSON.stringify(e)):e="";oa=!0;throw"abort("+e+"). Build with -s ASSERTIONS=1 for more info.";}function m(){}function t(a){return(a||m).__cache__}function T(a,b){var c=t(b),e=c[a];if(e)return e;e=Object.create((b||m).prototype);e.ptr=a;return c[a]=e}function U(a){if("string"===typeof a){for(var b=
u(Ya)}}null===Za&&(Za=Date.now());if(!(0<ha)){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)$a.unshift(a.preRun.shift());u($a);0<ha||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1);b()},1)):b())}}function W(e){if(a.onAbort)a.onAbort(e);void 0!==e?(a.print(e),a.printErr(e),e=JSON.stringify(e)):e="";ua=!0;var b="abort("+e+") at "+g()+"\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information."; 0,c=0;c<a.length;++c){var e=a.charCodeAt(c);55296<=e&&57343>=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++c)&1023);127>=e?++b:b=2047>=e?b+2:65535>=e?b+3:2097151>=e?b+4:67108863>=e?b+5:b+6}b=Array(b+1);c=0;e=b.length;if(0<e){e=c+e-1;for(var d=0;d<a.length;++d){var f=a.charCodeAt(d);55296<=f&&57343>=f&&(f=65536+((f&1023)<<10)|a.charCodeAt(++d)&1023);if(127>=f){if(c>=e)break;b[c++]=f}else{if(2047>=f){if(c+1>=e)break;b[c++]=192|f>>6}else{if(65535>=f){if(c+2>=e)break;b[c++]=224|f>>12}else{if(2097151>=f){if(c+
ab&&ab.forEach(function(a){b=a(b,e)});throw b;}function p(){}function t(a){return(a||p).__cache__}function X(a,b){var c=t(b),e=c[a];if(e)return e;e=Object.create((b||p).prototype);e.ptr=a;return c[a]=e}function Y(a){if("string"===typeof a){for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);55296<=e&&57343>=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++c)&1023);127>=e?++b:b=2047>=e?b+2:65535>=e?b+3:2097151>=e?b+4:67108863>=e?b+5:b+6}b=Array(b+1);c=0;e=b.length;if(0<e){e=c+e-1;for(var d=0;d<a.length;++d){var f= 3>=e)break;b[c++]=240|f>>18}else{if(67108863>=f){if(c+4>=e)break;b[c++]=248|f>>24}else{if(c+5>=e)break;b[c++]=252|f>>30;b[c++]=128|f>>24&63}b[c++]=128|f>>18&63}b[c++]=128|f>>12&63}b[c++]=128|f>>6&63}b[c++]=128|f&63}}b[c]=0}a=l.alloc(b,ia);l.copy(b,ia,a)}return a}function z(){throw"cannot construct a Status, no constructor in IDL";}function F(){this.ptr=Wa();t(F)[this.ptr]=this}function G(){this.ptr=Xa();t(G)[this.ptr]=this}function H(){this.ptr=Ya();t(H)[this.ptr]=this}function I(){this.ptr=Za();
a.charCodeAt(d);55296<=f&&57343>=f&&(f=65536+((f&1023)<<10)|a.charCodeAt(++d)&1023);if(127>=f){if(c>=e)break;b[c++]=f}else{if(2047>=f){if(c+1>=e)break;b[c++]=192|f>>6}else{if(65535>=f){if(c+2>=e)break;b[c++]=224|f>>12}else{if(2097151>=f){if(c+3>=e)break;b[c++]=240|f>>18}else{if(67108863>=f){if(c+4>=e)break;b[c++]=248|f>>24}else{if(c+5>=e)break;b[c++]=252|f>>30;b[c++]=128|f>>24&63}b[c++]=128|f>>18&63}b[c++]=128|f>>12&63}b[c++]=128|f>>6&63}b[c++]=128|f&63}}b[c]=0}a=k.alloc(b,fa);k.copy(b,fa,a)}return a} t(I)[this.ptr]=this}function J(){this.ptr=$a();t(J)[this.ptr]=this}function n(){this.ptr=ab();t(n)[this.ptr]=this}function P(){this.ptr=bb();t(P)[this.ptr]=this}function x(){this.ptr=cb();t(x)[this.ptr]=this}function K(){this.ptr=db();t(K)[this.ptr]=this}function q(){this.ptr=eb();t(q)[this.ptr]=this}function L(){this.ptr=fb();t(L)[this.ptr]=this}function M(){this.ptr=gb();t(M)[this.ptr]=this}function V(){this.ptr=hb();t(V)[this.ptr]=this}function Q(){this.ptr=ib();t(Q)[this.ptr]=this}function g(){this.ptr=
function B(){throw"cannot construct a Status, no constructor in IDL";}function G(){this.ptr=lb();t(G)[this.ptr]=this}function H(){this.ptr=mb();t(H)[this.ptr]=this}function I(){this.ptr=nb();t(I)[this.ptr]=this}function J(){this.ptr=ob();t(J)[this.ptr]=this}function K(){this.ptr=pb();t(K)[this.ptr]=this}function q(){this.ptr=qb();t(q)[this.ptr]=this}function P(){this.ptr=rb();t(P)[this.ptr]=this}function z(){this.ptr=sb();t(z)[this.ptr]=this}function L(){this.ptr=tb();t(L)[this.ptr]=this}function r(){this.ptr= jb();t(g)[this.ptr]=this}function C(){this.ptr=kb();t(C)[this.ptr]=this}function X(){throw"cannot construct a VoidPtr, no constructor in IDL";}function N(){this.ptr=lb();t(N)[this.ptr]=this}function R(){this.ptr=mb();t(R)[this.ptr]=this}d=d||{};var a="undefined"!==typeof d?d:{},Qa=!1,Ra=!1;a.onRuntimeInitialized=function(){Qa=!0;if(Ra&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Ra=!0;if(Qa&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=
ub();t(r)[this.ptr]=this}function M(){this.ptr=vb();t(M)[this.ptr]=this}function N(){this.ptr=wb();t(N)[this.ptr]=this}function Z(){this.ptr=xb();t(Z)[this.ptr]=this}function R(){this.ptr=yb();t(R)[this.ptr]=this}function h(){this.ptr=zb();t(h)[this.ptr]=this}function C(){this.ptr=Ab();t(C)[this.ptr]=this}function ca(){throw"cannot construct a VoidPtr, no constructor in IDL";}function O(){this.ptr=Bb();t(O)[this.ptr]=this}function S(){this.ptr=Cb();t(S)[this.ptr]=this}var a=d=d||{},bb=!1,cb=!1;a.onRuntimeInitialized= function(a){if("string"!==typeof a)return!1;a=a.split(".");return 2>a.length||3<a.length?!1:1==a[0]&&0<=a[1]&&3>=a[1]?!0:0!=a[0]||10<a[1]?!1:!0};var pa={},aa;for(aa in a)a.hasOwnProperty(aa)&&(pa[aa]=a[aa]);a.arguments=[];a.thisProgram="./this.program";a.quit=function(a,b){throw b;};a.preRun=[];a.postRun=[];var ja=!1,fa=!1,qa=!1,za=!1;if(a.ENVIRONMENT)if("WEB"===a.ENVIRONMENT)ja=!0;else if("WORKER"===a.ENVIRONMENT)fa=!0;else if("NODE"===a.ENVIRONMENT)qa=!0;else if("SHELL"===a.ENVIRONMENT)za=!0;else throw Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.");
function(){bb=!0;if(cb&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){cb=!0;if(bb&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(a){if("string"!==typeof a)return!1;a=a.split(".");return 2>a.length||3<a.length?!1:1==a[0]&&0<=a[1]&&3>=a[1]?!0:0!=a[0]||10<a[1]?!1:!0};a||(a=("undefined"!==typeof d?d:null)||{});var va={},da;for(da in a)a.hasOwnProperty(da)&&(va[da]=a[da]);var oa=!1,ka=!1,pa=!1,wa=!1;if(a.ENVIRONMENT)if("WEB"=== else ja="object"===typeof window,fa="function"===typeof importScripts,qa="object"===typeof process&&"function"===typeof require&&!ja&&!fa,za=!ja&&!qa&&!fa;if(qa){var Aa,Ba;a.read=function(a,b){Aa||(Aa=require("fs"));Ba||(Ba=require("path"));a=Ba.normalize(a);a=Aa.readFileSync(a);return b?a:a.toString()};a.readBinary=function(e){e=a.read(e,!0);e.buffer||(e=new Uint8Array(e));f(e.buffer);return e};1<process.argv.length&&(a.thisProgram=process.argv[1].replace(/\\/g,"/"));a.arguments=process.argv.slice(2);
a.ENVIRONMENT)oa=!0;else if("WORKER"===a.ENVIRONMENT)ka=!0;else if("NODE"===a.ENVIRONMENT)pa=!0;else if("SHELL"===a.ENVIRONMENT)wa=!0;else throw Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else oa="object"===typeof window,ka="function"===typeof importScripts,pa="object"===typeof process&&"function"===typeof require&&!oa&&!ka,wa=!oa&&!pa&&!ka;if(pa){a.print||(a.print=console.log);a.printErr||(a.printErr=console.warn);var Ea,Fa;a.read=function(a, process.on("uncaughtException",function(a){if(!(a instanceof na))throw a;});process.on("unhandledRejection",function(a,b){process.exit(1)});a.inspect=function(){return"[Emscripten Module object]"}}else if(za)"undefined"!=typeof read&&(a.read=function(a){return read(a)}),a.readBinary=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");f("object"===typeof a);return a},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&
b){Ea||(Ea=require("fs"));Fa||(Fa=require("path"));a=Fa.normalize(a);a=Ea.readFileSync(a);return b?a:a.toString()};a.readBinary=function(e){e=a.read(e,!0);e.buffer||(e=new Uint8Array(e));f(e.buffer);return e};a.thisProgram||(a.thisProgram=1<process.argv.length?process.argv[1].replace(/\\/g,"/"):"unknown-program");a.arguments=process.argv.slice(2);process.on("uncaughtException",function(a){if(!(a instanceof ea))throw a;});a.inspect=function(){return"[Emscripten Module object]"}}else if(wa)a.print|| (a.arguments=arguments),"function"===typeof quit&&(a.quit=function(a,b){quit(a)});else if(ja||fa)a.read=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},fa&&(a.readBinary=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),a.readAsync=function(a,b,c){var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=function(){200==e.status||0==e.status&&e.response?
(a.print=print),"undefined"!=typeof printErr&&(a.printErr=printErr),a.read="undefined"!=typeof read?function(a){return read(a)}:function(){throw"no read() available";},a.readBinary=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");f("object"===typeof a);return a},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(a,b){quit(a)});else if(oa||ka)a.read= b(e.response):c()};e.onerror=c;e.send(null)},a.setWindowTitle=function(a){document.title=a};a.print="undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null;a.printErr="undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||a.print;a.print=a.print;a.printErr=a.printErr;for(aa in pa)pa.hasOwnProperty(aa)&&(a[aa]=pa[aa]);pa=void 0;var oa=0,Ia="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;"undefined"!==typeof TextDecoder&&
function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ka&&(a.readBinary=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),a.readAsync=function(a,b,c){var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=function(){200==e.status||0==e.status&&e.response?b(e.response):c()};e.onerror=c;e.send(null)},"undefined"!=typeof arguments&&(a.arguments=arguments), new TextDecoder("utf-16le");var ia,W,Ja,E,ba,Ca,ta,ua,Da,ka;var Ea=ba=Ca=ta=ua=Da=ka=0;var Sa=!1;a.reallocBuffer||(a.reallocBuffer=function(a){try{if(ArrayBuffer.transfer)var b=ArrayBuffer.transfer(D,a);else{var c=ia;b=new ArrayBuffer(a);(new Int8Array(b)).set(c)}}catch(p){return!1}return nb(b)?b:!1});try{var Ta=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);Ta(new ArrayBuffer(4))}catch(e){Ta=function(a){return a.byteLength}}var Fa=a.TOTAL_STACK||
"undefined"!==typeof console?(a.print||(a.print=function(a){console.log(a)}),a.printErr||(a.printErr=function(a){console.warn(a)})):a.print||(a.print=function(a){}),"undefined"===typeof a.setWindowTitle&&(a.setWindowTitle=function(a){document.title=a});else throw Error("Unknown runtime environment. Where are we?");a.print||(a.print=function(){});a.printErr||(a.printErr=a.print);a.arguments||(a.arguments=[]);a.thisProgram||(a.thisProgram="./this.program");a.quit||(a.quit=function(a,b){throw b;});a.print= 5242880,A=a.TOTAL_MEMORY||16777216;A<Fa&&a.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+A+"! (TOTAL_STACK="+Fa+")");if(a.buffer)var D=a.buffer;else"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(a.wasmMemory=new WebAssembly.Memory({initial:A/65536}),D=a.wasmMemory.buffer):D=new ArrayBuffer(A),a.buffer=D;r();E[0]=1668509029;Ja[1]=25459;if(115!==W[2]||99!==W[3])throw"Runtime error: expected the system to be little-endian!";var Pa=[],Ma=[],Na=[],ob=[],Oa=[],
a.print;a.printErr=a.printErr;a.preRun=[];a.postRun=[];for(da in va)va.hasOwnProperty(da)&&(a[da]=va[da]);va=void 0;var m={setTempRet0:function(a){return tempRet0=a},getTempRet0:function(){return tempRet0},stackSave:function(){return U},stackRestore:function(a){U=a},getNativeTypeSize:function(a){switch(a){case "i1":case "i8":return 1;case "i16":return 2;case "i32":return 4;case "i64":return 8;case "float":return 4;case "double":return 8;default:return"*"===a[a.length-1]?m.QUANTUM_SIZE:"i"===a[0]? La=!1,pb=Math.floor,ea=0,Ga=null,ra=null;a.preloadedImages={};a.preloadedAudios={};(function(){function e(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(a.readBinary)return a.readBinary(f);throw"on the web, we need the wasm binary to be preloaded and set on Module['wasmBinary']. emcc.py will do that for you when generating HTML (but not JS)";}catch(Va){O(Va)}}function b(){return a.wasmBinary||!ja&&!fa||"function"!==typeof fetch?new Promise(function(a,b){a(e())}):fetch(f,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+
(a=parseInt(a.substr(1)),f(0===a%8),a/8):0}},getNativeFieldSize:function(a){return Math.max(m.getNativeTypeSize(a),m.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(a,b){"double"===b||"i64"===b?a&7&&(f(4===(a&7)),a+=4):f(0===(a&3));return a},getAlignSize:function(a,b,c){return c||"i64"!=a&&"double"!=a?a?Math.min(b||(a?m.getNativeFieldSize(a):0),m.QUANTUM_SIZE):Math.min(b,8):8},dynCall:function(e,b,c){return c&&c.length?a["dynCall_"+e].apply(null,[b].concat(c)):a["dynCall_"+e].call(null,b)},functionPointers:[], f+"'";return a.arrayBuffer()}).catch(function(){return e()})}function c(c,e,d){function p(b,c){k=b.exports;k.memory&&(b=k.memory,c=a.buffer,b.byteLength<c.byteLength&&a.printErr("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),c=new Int8Array(c),(new Int8Array(b)).set(c),a.buffer=D=b,r());a.asm=k;a.usingWasm=!0;ea--;a.monitorRunDependencies&&a.monitorRunDependencies(ea);0==ea&&(null!==Ga&&(clearInterval(Ga),Ga=null),ra&&(b=ra,ra=null,b()))}
addFunction:function(a){for(var b=0;b<m.functionPointers.length;b++)if(!m.functionPointers[b])return m.functionPointers[b]=a,2*(1+b);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";},removeFunction:function(a){m.functionPointers[(a-2)/2]=null},warnOnce:function(e){m.warnOnce.shown||(m.warnOnce.shown={});m.warnOnce.shown[e]||(m.warnOnce.shown[e]=1,a.printErr(e))},funcWrappers:{},getFuncWrapper:function(a,b){if(a){f(b);m.funcWrappers[b]||(m.funcWrappers[b]= function g(a){p(a.instance,a.module)}function S(c){b().then(function(a){return WebAssembly.instantiate(a,h)}).then(c).catch(function(b){a.printErr("failed to asynchronously prepare wasm: "+b);O(b)})}if("object"!==typeof WebAssembly)return a.printErr("no native wasm support detected"),!1;if(!(a.wasmMemory instanceof WebAssembly.Memory))return a.printErr("no native wasm Memory in use"),!1;e.memory=a.wasmMemory;h.global={NaN:NaN,Infinity:Infinity};h["global.Math"]=Math;h.env=e;ea++;a.monitorRunDependencies&&
{});var c=m.funcWrappers[b];c[a]||(c[a]=1===b.length?function(){return m.dynCall(b,a)}:2===b.length?function(c){return m.dynCall(b,a,[c])}:function(){return m.dynCall(b,a,Array.prototype.slice.call(arguments))});return c[a]}},getCompilerSetting:function(a){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work";},stackAlloc:function(a){var b=U;U=U+a|0;U=U+15&-16;return b},staticAlloc:function(a){var b=aa;aa=aa+a|0;aa=aa+15& a.monitorRunDependencies(ea);if(a.instantiateWasm)try{return a.instantiateWasm(h,p)}catch(qb){return a.printErr("Module.instantiateWasm callback failed with error: "+qb),!1}a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||Y(f)||"function"!==typeof fetch?S(g):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),h).then(g).catch(function(b){a.printErr("wasm streaming compile failed: "+b);a.printErr("falling back to ArrayBuffer instantiation");S(g)});return{}}var d=
-16;return b},dynamicAlloc:function(a){var b=x[ba>>2];a=(b+a+15|0)&-16;x[ba>>2]=a;return a>=y&&!Ma()?(x[ba>>2]=b,0):b},alignMemory:function(a,b){return Math.ceil(a/(b?b:16))*(b?b:16)},makeBigInt:function(a,b,c){return c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(b|0)},GLOBAL_BASE:1024,QUANTUM_SIZE:4,__dummy__:0},ua=0,Ua="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var Aa=65536,Sa=16777216,ib=16777216,fa,T,za, "draco_decoder.wast",f="draco_decoder.wasm",g="draco_decoder.temp.asm.js";"function"===typeof a.locateFile&&(Y(d)||(d=a.locateFile(d)),Y(f)||(f=a.locateFile(f)),Y(g)||(g=a.locateFile(g)));var h={global:null,env:null,asm2wasm:{"f64-rem":function(a,b){return a%b},"debugger":function(){debugger}},parent:a},k=null;a.asmPreload=a.asm;var l=a.reallocBuffer;a.reallocBuffer=function(b){if("asmjs"===m)var c=l(b);else a:{b=ha(b,a.usingWasm?65536:16777216);var e=a.buffer.byteLength;if(a.usingWasm)try{c=-1!==
Oa,x,Pa,Qa,Ra,aa,Ga,U,xa,Ha,ba;var Ia=aa=Ga=U=xa=Ha=ba=0;a.reallocBuffer||(a.reallocBuffer=function(a){try{if(ArrayBuffer.transfer)var b=ArrayBuffer.transfer(F,a);else{var c=fa;b=new ArrayBuffer(a);(new Int8Array(b)).set(c)}}catch(l){return!1}return Db(b)?b:!1});try{var Ja=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);Ja(new ArrayBuffer(4))}catch(e){Ja=function(a){return a.byteLength}}var Ka=a.TOTAL_STACK||5242880,y=a.TOTAL_MEMORY||16777216; a.wasmMemory.grow((b-e)/65536)?a.buffer=a.wasmMemory.buffer:null;break a}catch(vd){c=null;break a}c=void 0}return c};var m="";a.asm=function(b,e,d){if(!e.table){var p=a.wasmTableSize;void 0===p&&(p=1024);var f=a.wasmMaxTableSize;e.table="object"===typeof WebAssembly&&"function"===typeof WebAssembly.Table?void 0!==f?new WebAssembly.Table({initial:p,maximum:f,element:"anyfunc"}):new WebAssembly.Table({initial:p,element:"anyfunc"}):Array(p);a.wasmTable=e.table}e.memoryBase||(e.memoryBase=a.STATIC_BASE);
y<Ka&&a.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+y+"! (TOTAL_STACK="+Ka+")");if(a.buffer)var F=a.buffer;else"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(a.wasmMemory=new WebAssembly.Memory({initial:y/Aa}),F=a.wasmMemory.buffer):F=new ArrayBuffer(y);D();x[0]=1668509029;za[1]=25459;if(115!==T[2]||99!==T[3])throw"Runtime error: expected the system to be little-endian!";a.HEAP=void 0;a.buffer=F;a.HEAP8=fa;a.HEAP16=za;a.HEAP32=x;a.HEAPU8=T;a.HEAPU16=Oa; e.tableBase||(e.tableBase=0);(b=c(b,e,d))||O("no binaryen method succeeded. consider enabling more options, like interpreting, if you want that: https://github.com/kripken/emscripten/wiki/WebAssembly#binaryen-methods");return b}})();Ea=1024;ba=Ea+19408;Ma.push();a.STATIC_BASE=Ea;a.STATIC_BUMP=19408;var rb=ba;ba+=16;var y={last:0,caught:[],infos:{},deAdjust:function(a){if(!a||y.infos[a])return a;for(var b in y.infos)if(y.infos[b].adjusted===a)return b;return a},addRef:function(a){a&&y.infos[a].refcount++},
a.HEAPU32=Pa;a.HEAPF32=Qa;a.HEAPF64=Ra;var $a=[],Wa=[],Xa=[],db=[],Ya=[],Va=!1;f(Math.imul&&Math.fround&&Math.clz32&&Math.trunc,"this is a legacy browser, build with LEGACY_VM_SUPPORT");var ha=0,Ba=null,sa=null;a.preloadedImages={};a.preloadedAudios={};var V=null;(function(){function e(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(a.readBinary)return a.readBinary(d);throw"on the web, we need the wasm binary to be preloaded and set on Module['wasmBinary']. emcc.py will do that for you when generating HTML (but not JS)"; decRef:function(e){if(e){var b=y.infos[e];f(0<b.refcount);b.refcount--;0!==b.refcount||b.rethrown||(b.destructor&&a.dynCall_vi(b.destructor,e),delete y.infos[e],___cxa_free_exception(e))}},clearRef:function(a){a&&(y.infos[a].refcount=0)}},u={varargs:0,get:function(a){u.varargs+=4;return E[u.varargs-4>>2]},getStr:function(){return v(u.get())},get64:function(){var a=u.get(),b=u.get();0<=a?f(0===b):f(-1===b);return a},getZero:function(){f(0===u.get())}},va={},Ha=1;ka=function(a){f(!Sa);var b=ba;ba=ba+
}catch(jb){W(jb)}}function b(){return a.wasmBinary||!oa&&!ka||"function"!==typeof fetch?new Promise(function(a,b){a(e())}):fetch(d,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+d+"'";return a.arrayBuffer()}).catch(function(){return e()})}function c(c,e,l){function f(b,c){h=b.exports;if(h.memory){b=h.memory;c=a.buffer;b.byteLength<c.byteLength&&a.printErr("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"); a+15&-16;return b}(4);Ca=ta=k(ba);ua=Ca+Fa;Da=k(ua);E[ka>>2]=Da;Sa=!0;a.wasmTableSize=492;a.wasmMaxTableSize=492;a.asmGlobalArg={};a.asmLibraryArg={abort:O,assert:f,enlargeMemory:function(){var e=a.usingWasm?65536:16777216,b=2147483648-e;if(E[ka>>2]>b)return!1;var c=A;for(A=Math.max(A,16777216);A<E[ka>>2];)A=536870912>=A?ha(2*A,e):Math.min(ha((3*A+2147483648)/4,e),b);e=a.reallocBuffer(A);if(!e||e.byteLength!=A)return A=c,!1;a.buffer=D=e;r();return!0},getTotalMemory:function(){return A},abortOnCannotGrowMemory:function(){O("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+
c=new Int8Array(c);var e=new Int8Array(b);V||c.set(e.subarray(a.STATIC_BASE,a.STATIC_BASE+a.STATIC_BUMP),a.STATIC_BASE);e.set(c);a.buffer=F=b;D()}a.asm=h;a.usingWasm=!0;Na("wasm-instantiate")}function E(a){f(a.instance,a.module)}function k(c){b().then(function(a){return WebAssembly.instantiate(a,g)}).then(c).catch(function(b){a.printErr("failed to asynchronously prepare wasm: "+b);W(b)})}if("object"!==typeof WebAssembly)return a.printErr("no native wasm support detected"),!1;if(!(a.wasmMemory instanceof A+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_ii:function(e,b){try{return a.dynCall_ii(e,b)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_iii:function(e,b,c){try{return a.dynCall_iii(e,b,c)}catch(p){if("number"!==typeof p&&"longjmp"!==p)throw p;a.setThrew(1,0)}},invoke_iiii:function(e,b,c,d){try{return a.dynCall_iiii(e,
WebAssembly.Memory))return a.printErr("no native wasm Memory in use"),!1;e.memory=a.wasmMemory;g.global={NaN:NaN,Infinity:Infinity};g["global.Math"]=c.Math;g.env=e;la("wasm-instantiate");if(a.instantiateWasm)try{return a.instantiateWasm(g,f)}catch(kb){return a.printErr("Module.instantiateWasm callback failed with error: "+kb),!1}a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||0===d.indexOf("data:")||"function"!==typeof fetch?k(E):WebAssembly.instantiateStreaming(fetch(d,{credentials:"same-origin"}), b,c,d)}catch(S){if("number"!==typeof S&&"longjmp"!==S)throw S;a.setThrew(1,0)}},invoke_iiiiiii:function(e,b,c,d,f,g,h){try{return a.dynCall_iiiiiii(e,b,c,d,f,g,h)}catch(da){if("number"!==typeof da&&"longjmp"!==da)throw da;a.setThrew(1,0)}},invoke_v:function(e){try{a.dynCall_v(e)}catch(b){if("number"!==typeof b&&"longjmp"!==b)throw b;a.setThrew(1,0)}},invoke_vi:function(e,b){try{a.dynCall_vi(e,b)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_vii:function(e,b,c){try{a.dynCall_vii(e,
g).then(E).catch(function(b){a.printErr("wasm streaming compile failed: "+b);a.printErr("falling back to ArrayBuffer instantiation");k(E)});return{}}var d="draco_decoder.wasm",f="draco_decoder.temp.asm.js";"function"===typeof a.locateFile&&(a.locateFile("draco_decoder.wast"),d=a.locateFile(d),f=a.locateFile(f));var g={global:null,env:null,asm2wasm:{"f64-rem":function(a,b){return a%b},"debugger":function(){debugger}},parent:a},h=null;a.asmPreload=a.asm;var k=a.reallocBuffer;a.reallocBuffer=function(b){if("asmjs"=== b,c)}catch(p){if("number"!==typeof p&&"longjmp"!==p)throw p;a.setThrew(1,0)}},invoke_viii:function(e,b,c,d){try{a.dynCall_viii(e,b,c,d)}catch(S){if("number"!==typeof S&&"longjmp"!==S)throw S;a.setThrew(1,0)}},invoke_viiii:function(e,b,c,d,f){try{a.dynCall_viiii(e,b,c,d,f)}catch(xa){if("number"!==typeof xa&&"longjmp"!==xa)throw xa;a.setThrew(1,0)}},invoke_viiiii:function(e,b,c,d,f,g){try{a.dynCall_viiiii(e,b,c,d,f,g)}catch(ca){if("number"!==typeof ca&&"longjmp"!==ca)throw ca;a.setThrew(1,0)}},invoke_viiiiii:function(e,
m)var c=k(b);else a:{b=ma(b,a.usingWasm?Aa:Sa);var e=a.buffer.byteLength;if(a.usingWasm)try{c=-1!==a.wasmMemory.grow((b-e)/65536)?a.buffer=a.wasmMemory.buffer:null;break a}catch(Jd){c=null;break a}c=void 0}return c};var m="";a.asm=function(b,e,d){if(!e.table){var l=a.wasmTableSize;void 0===l&&(l=1024);var f=a.wasmMaxTableSize;e.table="object"===typeof WebAssembly&&"function"===typeof WebAssembly.Table?void 0!==f?new WebAssembly.Table({initial:l,maximum:f,element:"anyfunc"}):new WebAssembly.Table({initial:l, b,c,d,f,g,h){try{a.dynCall_viiiiii(e,b,c,d,f,g,h)}catch(da){if("number"!==typeof da&&"longjmp"!==da)throw da;a.setThrew(1,0)}},__ZSt18uncaught_exceptionv:w,___cxa_allocate_exception:function(a){return Ka(a)},___cxa_begin_catch:function(a){var b=y.infos[a];b&&!b.caught&&(b.caught=!0,w.uncaught_exception--);b&&(b.rethrown=!1);y.caught.push(a);y.addRef(y.deAdjust(a));return a},___cxa_find_matching_catch:la,___cxa_pure_virtual:function(){oa=!0;throw"Pure virtual function called!";},___cxa_throw:function(a,
element:"anyfunc"}):Array(l);a.wasmTable=e.table}e.memoryBase||(e.memoryBase=a.STATIC_BASE);e.tableBase||(e.tableBase=0);(b=c(b,e,d))||W("no binaryen method succeeded. consider enabling more options, like interpreting, if you want that: https://github.com/kripken/emscripten/wiki/WebAssembly#binaryen-methods");return b}})();Ia=m.GLOBAL_BASE;aa=Ia+19104;Wa.push();V=null;a.STATIC_BASE=Ia;a.STATIC_BUMP=19104;var Eb=aa;aa+=16;var A={last:0,caught:[],infos:{},deAdjust:function(a){if(!a||A.infos[a])return a; b,c){y.infos[a]={ptr:a,adjusted:a,type:b,destructor:c,refcount:0,caught:!1,rethrown:!1};y.last=a;"uncaught_exception"in w?w.uncaught_exception++:w.uncaught_exception=1;throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___gxx_personality_v0:function(){},___resumeException:function(a){y.last||(y.last=a);throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";
for(var b in A.infos)if(A.infos[b].adjusted===a)return b;return a},addRef:function(a){a&&A.infos[a].refcount++},decRef:function(e){if(e){var b=A.infos[e];f(0<b.refcount);b.refcount--;0!==b.refcount||b.rethrown||(b.destructor&&a.dynCall_vi(b.destructor,e),delete A.infos[e],___cxa_free_exception(e))}},clearRef:function(a){a&&(A.infos[a].refcount=0)}},v={varargs:0,get:function(a){v.varargs+=4;return x[v.varargs-4>>2]},getStr:function(){return n(v.get())},get64:function(){var a=v.get(),b=v.get();0<=a? },___setErrNo:function(d){a.___errno_location&&(E[a.___errno_location()>>2]=d);return d},___syscall140:function(a,b){u.varargs=b;try{var c=u.getStreamFromFD();u.get();var d=u.get(),e=u.get(),f=u.get();FS.llseek(c,d,f);E[e>>2]=c.position;c.getdents&&0===d&&0===f&&(c.getdents=null);return 0}catch(ca){return"undefined"!==typeof FS&&ca instanceof FS.ErrnoError||O(ca),-ca.errno}},___syscall146:Z,___syscall54:function(a,b){u.varargs=b;return 0},___syscall6:function(a,b){u.varargs=b;try{var c=u.getStreamFromFD();
f(0===b):f(-1===b);return a},getZero:function(){f(0===v.get())}},ya={},La=1;db.push(function(){var e=a._fflush;e&&e(0);if(e=Q.printChar){var b=Q.buffers;b[1].length&&e(1,10);b[2].length&&e(2,10)}});ba=m.staticAlloc(4);Ga=U=m.alignMemory(aa);xa=Ga+Ka;Ha=m.alignMemory(xa);x[ba>>2]=Ha;a.wasmTableSize=492;a.wasmMaxTableSize=492;a.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array, FS.close(c);return 0}catch(p){return"undefined"!==typeof FS&&p instanceof FS.ErrnoError||O(p),-p.errno}},_abort:function(){a.abort()},_emscripten_memcpy_big:function(a,b,c){W.set(W.subarray(b,b+c),a);return a},_llvm_floor_f64:pb,_llvm_trap:function(){O("trap!")},_pthread_getspecific:function(a){return va[a]||0},_pthread_key_create:function(a,b){if(0==a)return 22;E[a>>2]=Ha;va[Ha]=0;Ha++;return 0},_pthread_once:ma,_pthread_setspecific:function(a,b){if(!(a in va))return 22;va[a]=b;return 0},flush_NO_FILESYSTEM:function(){var d=
Float64Array:Float64Array,NaN:NaN,Infinity:Infinity,byteLength:Ja};a.asmLibraryArg={abort:W,assert:f,enlargeMemory:Ma,getTotalMemory:function(){return y},abortOnCannotGrowMemory:function(){W("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+y+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}, a._fflush;d&&d(0);if(d=Z.printChar){var b=Z.buffers;b[1].length&&d(1,10);b[2].length&&d(2,10)}},DYNAMICTOP_PTR:ka,tempDoublePtr:rb,ABORT:oa,STACKTOP:ta,STACK_MAX:ua};var Ua=a.asm(a.asmGlobalArg,a.asmLibraryArg,D);a.asm=Ua;a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)};a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)};var $a=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0.apply(null,
invoke_ii:function(e,b){try{return a.dynCall_ii(e,b)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_iii:function(e,b,c){try{return a.dynCall_iii(e,b,c)}catch(l){if("number"!==typeof l&&"longjmp"!==l)throw l;a.setThrew(1,0)}},invoke_iiii:function(e,b,c,d){try{return a.dynCall_iiii(e,b,c,d)}catch(E){if("number"!==typeof E&&"longjmp"!==E)throw E;a.setThrew(1,0)}},invoke_iiiiiii:function(e,b,c,d,f,g,h){try{return a.dynCall_iiiiiii(e,b,c,d,f,g,h)}catch(ja){if("number"!== arguments)},sb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1.apply(null,arguments)},tb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform___destroy___0.apply(null,arguments)},ub=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0.apply(null,
typeof ja&&"longjmp"!==ja)throw ja;a.setThrew(1,0)}},invoke_v:function(e){try{a.dynCall_v(e)}catch(b){if("number"!==typeof b&&"longjmp"!==b)throw b;a.setThrew(1,0)}},invoke_vi:function(e,b){try{a.dynCall_vi(e,b)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_vii:function(e,b,c){try{a.dynCall_vii(e,b,c)}catch(l){if("number"!==typeof l&&"longjmp"!==l)throw l;a.setThrew(1,0)}},invoke_viii:function(e,b,c,d){try{a.dynCall_viii(e,b,c,d)}catch(E){if("number"!==typeof E&& arguments)},cb=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0.apply(null,arguments)},vb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1.apply(null,arguments)},wb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform___destroy___0.apply(null,
"longjmp"!==E)throw E;a.setThrew(1,0)}},invoke_viiii:function(e,b,c,d,f){try{a.dynCall_viiii(e,b,c,d,f)}catch(ta){if("number"!==typeof ta&&"longjmp"!==ta)throw ta;a.setThrew(1,0)}},invoke_viiiii:function(e,b,c,d,f,g){try{a.dynCall_viiiii(e,b,c,d,f,g)}catch(ia){if("number"!==typeof ia&&"longjmp"!==ia)throw ia;a.setThrew(1,0)}},invoke_viiiiii:function(e,b,c,d,f,g,h){try{a.dynCall_viiiiii(e,b,c,d,f,g,h)}catch(ja){if("number"!==typeof ja&&"longjmp"!==ja)throw ja;a.setThrew(1,0)}},__ZSt18uncaught_exceptionv:na, arguments)},xb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_min_value_1.apply(null,arguments)},yb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0.apply(null,arguments)},zb=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_range_0.apply(null,
___cxa_allocate_exception:function(a){return Ta(a)},___cxa_begin_catch:function(a){var b=A.infos[a];b&&!b.caught&&(b.caught=!0,na.uncaught_exception--);b&&(b.rethrown=!1);A.caught.push(a);A.addRef(A.deAdjust(a));return a},___cxa_find_matching_catch:qa,___cxa_pure_virtual:function(){ua=!0;throw"Pure virtual function called!";},___cxa_throw:function(a,b,c){A.infos[a]={ptr:a,adjusted:a,type:b,destructor:c,refcount:0,caught:!1,rethrown:!1};A.last=a;"uncaught_exception"in na?na.uncaught_exception++:na.uncaught_exception= arguments)},bb=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return a.asm._emscripten_bind_AttributeTransformData_AttributeTransformData_0.apply(null,arguments)},Ab=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return a.asm._emscripten_bind_AttributeTransformData___destroy___0.apply(null,arguments)},Bb=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return a.asm._emscripten_bind_AttributeTransformData_transform_type_0.apply(null,
1;throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___gxx_personality_v0:function(){},___resumeException:function(a){A.last||(A.last=a);throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___setErrNo:function(e){a.___errno_location&&(x[a.___errno_location()>>2]=e);return e}, arguments)},ib=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return a.asm._emscripten_bind_DecoderBuffer_DecoderBuffer_0.apply(null,arguments)},Cb=a._emscripten_bind_DecoderBuffer_Init_2=function(){return a.asm._emscripten_bind_DecoderBuffer_Init_2.apply(null,arguments)},Db=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return a.asm._emscripten_bind_DecoderBuffer___destroy___0.apply(null,arguments)},Eb=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToMesh_2.apply(null,
___syscall140:function(a,b){v.varargs=b;try{var c=v.getStreamFromFD();v.get();var e=v.get(),d=v.get(),f=v.get();FS.llseek(c,e,f);x[d>>2]=c.position;c.getdents&&0===e&&0===f&&(c.getdents=null);return 0}catch(ia){return"undefined"!==typeof FS&&ia instanceof FS.ErrnoError||W(ia),-ia.errno}},___syscall146:Q,___syscall54:function(a,b){v.varargs=b;return 0},___syscall6:function(a,b){v.varargs=b;try{var c=v.getStreamFromFD();FS.close(c);return 0}catch(l){return"undefined"!==typeof FS&&l instanceof FS.ErrnoError|| arguments)},Fb=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToPointCloud_2.apply(null,arguments)},jb=a._emscripten_bind_Decoder_Decoder_0=function(){return a.asm._emscripten_bind_Decoder_Decoder_0.apply(null,arguments)},Gb=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeByUniqueId_2.apply(null,arguments)},Hb=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=
W(l),-l.errno}},_abort:function(){a.abort()},_emscripten_memcpy_big:function(a,b,c){T.set(T.subarray(b,b+c),a);return a},_pthread_getspecific:function(a){return ya[a]||0},_pthread_key_create:function(a,b){if(0==a)return 22;x[a>>2]=La;ya[La]=0;La++;return 0},_pthread_once:ra,_pthread_setspecific:function(a,b){if(!(a in ya))return 22;ya[a]=b;return 0},DYNAMICTOP_PTR:ba,tempDoublePtr:Eb,ABORT:ua,STACKTOP:U,STACK_MAX:xa};var eb=a.asm(a.asmGlobalArg,a.asmLibraryArg,F);a.asm=eb;a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null, function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3.apply(null,arguments)},Ib=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloat_3.apply(null,arguments)},Jb=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3.apply(null,arguments)},Kb=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByName_2.apply(null,
arguments)};a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)};var pb=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0.apply(null,arguments)},Fb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1.apply(null,arguments)}, arguments)},Lb=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeId_2.apply(null,arguments)},Mb=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3.apply(null,arguments)},Nb=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3.apply(null,arguments)},Ob=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=
Gb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform___destroy___0.apply(null,arguments)},Hb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0.apply(null,arguments)},sb=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0.apply(null, function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3.apply(null,arguments)},Pb=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3.apply(null,arguments)},Qb=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeMetadata_2.apply(null,arguments)},Rb=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3.apply(null,
arguments)},Ib=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1.apply(null,arguments)},Jb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform___destroy___0.apply(null,arguments)},Kb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_min_value_1.apply(null, arguments)},Sb=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3.apply(null,arguments)},Tb=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3.apply(null,arguments)},Ub=a._emscripten_bind_Decoder_GetAttribute_2=function(){return a.asm._emscripten_bind_Decoder_GetAttribute_2.apply(null,arguments)},Vb=a._emscripten_bind_Decoder_GetEncodedGeometryType_1=
arguments)},Lb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0.apply(null,arguments)},Mb=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_range_0.apply(null,arguments)},rb=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return a.asm._emscripten_bind_AttributeTransformData_AttributeTransformData_0.apply(null, function(){return a.asm._emscripten_bind_Decoder_GetEncodedGeometryType_1.apply(null,arguments)},Wb=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return a.asm._emscripten_bind_Decoder_GetFaceFromMesh_3.apply(null,arguments)},Xb=a._emscripten_bind_Decoder_GetMetadata_1=function(){return a.asm._emscripten_bind_Decoder_GetMetadata_1.apply(null,arguments)},Yb=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return a.asm._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2.apply(null,
arguments)},Nb=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return a.asm._emscripten_bind_AttributeTransformData___destroy___0.apply(null,arguments)},Ob=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return a.asm._emscripten_bind_AttributeTransformData_transform_type_0.apply(null,arguments)},yb=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return a.asm._emscripten_bind_DecoderBuffer_DecoderBuffer_0.apply(null,arguments)},Pb=a._emscripten_bind_DecoderBuffer_Init_2= arguments)},Zb=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return a.asm._emscripten_bind_Decoder_SkipAttributeTransform_1.apply(null,arguments)},$b=a._emscripten_bind_Decoder___destroy___0=function(){return a.asm._emscripten_bind_Decoder___destroy___0.apply(null,arguments)},gb=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0.apply(null,arguments)},ac=a._emscripten_bind_DracoFloat32Array_GetValue_1=
function(){return a.asm._emscripten_bind_DecoderBuffer_Init_2.apply(null,arguments)},Qb=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return a.asm._emscripten_bind_DecoderBuffer___destroy___0.apply(null,arguments)},Rb=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToMesh_2.apply(null,arguments)},Sb=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToPointCloud_2.apply(null, function(){return a.asm._emscripten_bind_DracoFloat32Array_GetValue_1.apply(null,arguments)},bc=a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoFloat32Array___destroy___0.apply(null,arguments)},cc=a._emscripten_bind_DracoFloat32Array_size_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_size_0.apply(null,arguments)},fb=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return a.asm._emscripten_bind_DracoInt16Array_DracoInt16Array_0.apply(null,
arguments)},zb=a._emscripten_bind_Decoder_Decoder_0=function(){return a.asm._emscripten_bind_Decoder_Decoder_0.apply(null,arguments)},Tb=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeByUniqueId_2.apply(null,arguments)},Ub=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3.apply(null,arguments)},Vb=a._emscripten_bind_Decoder_GetAttributeFloat_3= arguments)},dc=a._emscripten_bind_DracoInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt16Array_GetValue_1.apply(null,arguments)},ec=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt16Array___destroy___0.apply(null,arguments)},fc=a._emscripten_bind_DracoInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoInt16Array_size_0.apply(null,arguments)},lb=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return a.asm._emscripten_bind_DracoInt32Array_DracoInt32Array_0.apply(null,
function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloat_3.apply(null,arguments)},Wb=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3.apply(null,arguments)},Xb=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByName_2.apply(null,arguments)},Yb=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeId_2.apply(null, arguments)},gc=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt32Array_GetValue_1.apply(null,arguments)},hc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt32Array___destroy___0.apply(null,arguments)},ic=a._emscripten_bind_DracoInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoInt32Array_size_0.apply(null,arguments)},db=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return a.asm._emscripten_bind_DracoInt8Array_DracoInt8Array_0.apply(null,
arguments)},Zb=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3.apply(null,arguments)},$b=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3.apply(null,arguments)},ac=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3.apply(null,arguments)}, arguments)},jc=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt8Array_GetValue_1.apply(null,arguments)},kc=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt8Array___destroy___0.apply(null,arguments)},lc=a._emscripten_bind_DracoInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoInt8Array_size_0.apply(null,arguments)},Wa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0.apply(null,
bc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3.apply(null,arguments)},cc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeMetadata_2.apply(null,arguments)},dc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3.apply(null,arguments)},ec=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3= arguments)},mc=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt16Array_GetValue_1.apply(null,arguments)},nc=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt16Array___destroy___0.apply(null,arguments)},oc=a._emscripten_bind_DracoUInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_size_0.apply(null,arguments)},Za=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0.apply(null,
function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3.apply(null,arguments)},fc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3.apply(null,arguments)},gc=a._emscripten_bind_Decoder_GetAttribute_2=function(){return a.asm._emscripten_bind_Decoder_GetAttribute_2.apply(null,arguments)},hc=a._emscripten_bind_Decoder_GetEncodedGeometryType_1=function(){return a.asm._emscripten_bind_Decoder_GetEncodedGeometryType_1.apply(null, arguments)},pc=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt32Array_GetValue_1.apply(null,arguments)},qc=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt32Array___destroy___0.apply(null,arguments)},rc=a._emscripten_bind_DracoUInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_size_0.apply(null,arguments)},Ya=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0.apply(null,
arguments)},ic=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return a.asm._emscripten_bind_Decoder_GetFaceFromMesh_3.apply(null,arguments)},jc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return a.asm._emscripten_bind_Decoder_GetMetadata_1.apply(null,arguments)},kc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return a.asm._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2.apply(null,arguments)},lc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return a.asm._emscripten_bind_Decoder_SkipAttributeTransform_1.apply(null, arguments)},sc=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt8Array_GetValue_1.apply(null,arguments)},tc=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt8Array___destroy___0.apply(null,arguments)},uc=a._emscripten_bind_DracoUInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_size_0.apply(null,arguments)},hb=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return a.asm._emscripten_bind_GeometryAttribute_GeometryAttribute_0.apply(null,
arguments)},mc=a._emscripten_bind_Decoder___destroy___0=function(){return a.asm._emscripten_bind_Decoder___destroy___0.apply(null,arguments)},wb=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0.apply(null,arguments)},nc=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoFloat32Array_GetValue_1.apply(null,arguments)},oc=a._emscripten_bind_DracoFloat32Array___destroy___0= arguments)},vc=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return a.asm._emscripten_bind_GeometryAttribute___destroy___0.apply(null,arguments)},kb=a._emscripten_bind_Mesh_Mesh_0=function(){return a.asm._emscripten_bind_Mesh_Mesh_0.apply(null,arguments)},wc=a._emscripten_bind_Mesh___destroy___0=function(){return a.asm._emscripten_bind_Mesh___destroy___0.apply(null,arguments)},xc=a._emscripten_bind_Mesh_num_attributes_0=function(){return a.asm._emscripten_bind_Mesh_num_attributes_0.apply(null,
function(){return a.asm._emscripten_bind_DracoFloat32Array___destroy___0.apply(null,arguments)},pc=a._emscripten_bind_DracoFloat32Array_size_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_size_0.apply(null,arguments)},vb=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return a.asm._emscripten_bind_DracoInt16Array_DracoInt16Array_0.apply(null,arguments)},qc=a._emscripten_bind_DracoInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt16Array_GetValue_1.apply(null, arguments)},yc=a._emscripten_bind_Mesh_num_faces_0=function(){return a.asm._emscripten_bind_Mesh_num_faces_0.apply(null,arguments)},zc=a._emscripten_bind_Mesh_num_points_0=function(){return a.asm._emscripten_bind_Mesh_num_points_0.apply(null,arguments)},Ac=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetDoubleEntry_2.apply(null,arguments)},Bc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetEntryName_2.apply(null,
arguments)},rc=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt16Array___destroy___0.apply(null,arguments)},sc=a._emscripten_bind_DracoInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoInt16Array_size_0.apply(null,arguments)},Bb=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return a.asm._emscripten_bind_DracoInt32Array_DracoInt32Array_0.apply(null,arguments)},tc=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt32Array_GetValue_1.apply(null, arguments)},Cc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetIntEntry_2.apply(null,arguments)},Dc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetStringEntry_2.apply(null,arguments)},Ec=a._emscripten_bind_MetadataQuerier_HasDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasDoubleEntry_2.apply(null,arguments)},Fc=a._emscripten_bind_MetadataQuerier_HasEntry_2=
arguments)},uc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt32Array___destroy___0.apply(null,arguments)},vc=a._emscripten_bind_DracoInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoInt32Array_size_0.apply(null,arguments)},tb=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return a.asm._emscripten_bind_DracoInt8Array_DracoInt8Array_0.apply(null,arguments)},wc=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt8Array_GetValue_1.apply(null, function(){return a.asm._emscripten_bind_MetadataQuerier_HasEntry_2.apply(null,arguments)},Gc=a._emscripten_bind_MetadataQuerier_HasIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasIntEntry_2.apply(null,arguments)},Hc=a._emscripten_bind_MetadataQuerier_HasStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasStringEntry_2.apply(null,arguments)},eb=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return a.asm._emscripten_bind_MetadataQuerier_MetadataQuerier_0.apply(null,
arguments)},xc=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt8Array___destroy___0.apply(null,arguments)},yc=a._emscripten_bind_DracoInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoInt8Array_size_0.apply(null,arguments)},lb=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0.apply(null,arguments)},zc=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt16Array_GetValue_1.apply(null, arguments)},Ic=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return a.asm._emscripten_bind_MetadataQuerier_NumEntries_1.apply(null,arguments)},Jc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return a.asm._emscripten_bind_MetadataQuerier___destroy___0.apply(null,arguments)},mb=a._emscripten_bind_Metadata_Metadata_0=function(){return a.asm._emscripten_bind_Metadata_Metadata_0.apply(null,arguments)},Kc=a._emscripten_bind_Metadata___destroy___0=function(){return a.asm._emscripten_bind_Metadata___destroy___0.apply(null,
arguments)},Ac=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt16Array___destroy___0.apply(null,arguments)},Bc=a._emscripten_bind_DracoUInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_size_0.apply(null,arguments)},ob=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0.apply(null,arguments)},Cc=a._emscripten_bind_DracoUInt32Array_GetValue_1= arguments)},Lc=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return a.asm._emscripten_bind_PointAttribute_GetAttributeTransformData_0.apply(null,arguments)},ab=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return a.asm._emscripten_bind_PointAttribute_PointAttribute_0.apply(null,arguments)},Mc=a._emscripten_bind_PointAttribute___destroy___0=function(){return a.asm._emscripten_bind_PointAttribute___destroy___0.apply(null,arguments)},Nc=a._emscripten_bind_PointAttribute_attribute_type_0=
function(){return a.asm._emscripten_bind_DracoUInt32Array_GetValue_1.apply(null,arguments)},Dc=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt32Array___destroy___0.apply(null,arguments)},Ec=a._emscripten_bind_DracoUInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_size_0.apply(null,arguments)},nb=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0.apply(null, function(){return a.asm._emscripten_bind_PointAttribute_attribute_type_0.apply(null,arguments)},Oc=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_offset_0.apply(null,arguments)},Pc=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_stride_0.apply(null,arguments)},Qc=a._emscripten_bind_PointAttribute_data_type_0=function(){return a.asm._emscripten_bind_PointAttribute_data_type_0.apply(null,
arguments)},Fc=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt8Array_GetValue_1.apply(null,arguments)},Gc=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt8Array___destroy___0.apply(null,arguments)},Hc=a._emscripten_bind_DracoUInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_size_0.apply(null,arguments)},xb=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return a.asm._emscripten_bind_GeometryAttribute_GeometryAttribute_0.apply(null, arguments)},Rc=a._emscripten_bind_PointAttribute_normalized_0=function(){return a.asm._emscripten_bind_PointAttribute_normalized_0.apply(null,arguments)},Sc=a._emscripten_bind_PointAttribute_num_components_0=function(){return a.asm._emscripten_bind_PointAttribute_num_components_0.apply(null,arguments)},Tc=a._emscripten_bind_PointAttribute_size_0=function(){return a.asm._emscripten_bind_PointAttribute_size_0.apply(null,arguments)},Uc=a._emscripten_bind_PointAttribute_unique_id_0=function(){return a.asm._emscripten_bind_PointAttribute_unique_id_0.apply(null,
arguments)},Ic=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return a.asm._emscripten_bind_GeometryAttribute___destroy___0.apply(null,arguments)},Ab=a._emscripten_bind_Mesh_Mesh_0=function(){return a.asm._emscripten_bind_Mesh_Mesh_0.apply(null,arguments)},Jc=a._emscripten_bind_Mesh___destroy___0=function(){return a.asm._emscripten_bind_Mesh___destroy___0.apply(null,arguments)},Kc=a._emscripten_bind_Mesh_num_attributes_0=function(){return a.asm._emscripten_bind_Mesh_num_attributes_0.apply(null, arguments)},Xa=a._emscripten_bind_PointCloud_PointCloud_0=function(){return a.asm._emscripten_bind_PointCloud_PointCloud_0.apply(null,arguments)},Vc=a._emscripten_bind_PointCloud___destroy___0=function(){return a.asm._emscripten_bind_PointCloud___destroy___0.apply(null,arguments)},Wc=a._emscripten_bind_PointCloud_num_attributes_0=function(){return a.asm._emscripten_bind_PointCloud_num_attributes_0.apply(null,arguments)},Xc=a._emscripten_bind_PointCloud_num_points_0=function(){return a.asm._emscripten_bind_PointCloud_num_points_0.apply(null,
arguments)},Lc=a._emscripten_bind_Mesh_num_faces_0=function(){return a.asm._emscripten_bind_Mesh_num_faces_0.apply(null,arguments)},Mc=a._emscripten_bind_Mesh_num_points_0=function(){return a.asm._emscripten_bind_Mesh_num_points_0.apply(null,arguments)},Nc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetDoubleEntry_2.apply(null,arguments)},Oc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetEntryName_2.apply(null, arguments)},Yc=a._emscripten_bind_Status___destroy___0=function(){return a.asm._emscripten_bind_Status___destroy___0.apply(null,arguments)},Zc=a._emscripten_bind_Status_code_0=function(){return a.asm._emscripten_bind_Status_code_0.apply(null,arguments)},$c=a._emscripten_bind_Status_error_msg_0=function(){return a.asm._emscripten_bind_Status_error_msg_0.apply(null,arguments)},ad=a._emscripten_bind_Status_ok_0=function(){return a.asm._emscripten_bind_Status_ok_0.apply(null,arguments)},bd=a._emscripten_bind_VoidPtr___destroy___0=
arguments)},Pc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetIntEntry_2.apply(null,arguments)},Qc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetStringEntry_2.apply(null,arguments)},Rc=a._emscripten_bind_MetadataQuerier_HasDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasDoubleEntry_2.apply(null,arguments)},Sc=a._emscripten_bind_MetadataQuerier_HasEntry_2= function(){return a.asm._emscripten_bind_VoidPtr___destroy___0.apply(null,arguments)},cd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM.apply(null,arguments)},dd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM.apply(null,arguments)},ed=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=
function(){return a.asm._emscripten_bind_MetadataQuerier_HasEntry_2.apply(null,arguments)},Tc=a._emscripten_bind_MetadataQuerier_HasIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasIntEntry_2.apply(null,arguments)},Uc=a._emscripten_bind_MetadataQuerier_HasStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasStringEntry_2.apply(null,arguments)},ub=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return a.asm._emscripten_bind_MetadataQuerier_MetadataQuerier_0.apply(null, function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM.apply(null,arguments)},fd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM.apply(null,arguments)},gd=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE.apply(null,
arguments)},Vc=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return a.asm._emscripten_bind_MetadataQuerier_NumEntries_1.apply(null,arguments)},Wc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return a.asm._emscripten_bind_MetadataQuerier___destroy___0.apply(null,arguments)},Cb=a._emscripten_bind_Metadata_Metadata_0=function(){return a.asm._emscripten_bind_Metadata_Metadata_0.apply(null,arguments)},Xc=a._emscripten_bind_Metadata___destroy___0=function(){return a.asm._emscripten_bind_Metadata___destroy___0.apply(null, arguments)},hd=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD.apply(null,arguments)},id=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH.apply(null,arguments)},jd=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_COLOR.apply(null,arguments)},kd=
arguments)},Yc=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return a.asm._emscripten_bind_PointAttribute_GetAttributeTransformData_0.apply(null,arguments)},qb=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return a.asm._emscripten_bind_PointAttribute_PointAttribute_0.apply(null,arguments)},Zc=a._emscripten_bind_PointAttribute___destroy___0=function(){return a.asm._emscripten_bind_PointAttribute___destroy___0.apply(null,arguments)},$c=a._emscripten_bind_PointAttribute_attribute_type_0= a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_GENERIC.apply(null,arguments)},ld=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_INVALID.apply(null,arguments)},md=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_NORMAL.apply(null,arguments)},nd=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=
function(){return a.asm._emscripten_bind_PointAttribute_attribute_type_0.apply(null,arguments)},ad=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_offset_0.apply(null,arguments)},bd=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_stride_0.apply(null,arguments)},cd=a._emscripten_bind_PointAttribute_data_type_0=function(){return a.asm._emscripten_bind_PointAttribute_data_type_0.apply(null, function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_POSITION.apply(null,arguments)},od=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD.apply(null,arguments)},pd=a._emscripten_enum_draco_StatusCode_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_ERROR.apply(null,arguments)},qd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return a.asm._emscripten_enum_draco_StatusCode_INVALID_PARAMETER.apply(null,
arguments)},dd=a._emscripten_bind_PointAttribute_normalized_0=function(){return a.asm._emscripten_bind_PointAttribute_normalized_0.apply(null,arguments)},ed=a._emscripten_bind_PointAttribute_num_components_0=function(){return a.asm._emscripten_bind_PointAttribute_num_components_0.apply(null,arguments)},fd=a._emscripten_bind_PointAttribute_size_0=function(){return a.asm._emscripten_bind_PointAttribute_size_0.apply(null,arguments)},gd=a._emscripten_bind_PointAttribute_unique_id_0=function(){return a.asm._emscripten_bind_PointAttribute_unique_id_0.apply(null, arguments)},rd=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_IO_ERROR.apply(null,arguments)},sd=a._emscripten_enum_draco_StatusCode_OK=function(){return a.asm._emscripten_enum_draco_StatusCode_OK.apply(null,arguments)},td=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION.apply(null,arguments)},ud=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION.apply(null,
arguments)},mb=a._emscripten_bind_PointCloud_PointCloud_0=function(){return a.asm._emscripten_bind_PointCloud_PointCloud_0.apply(null,arguments)},hd=a._emscripten_bind_PointCloud___destroy___0=function(){return a.asm._emscripten_bind_PointCloud___destroy___0.apply(null,arguments)},id=a._emscripten_bind_PointCloud_num_attributes_0=function(){return a.asm._emscripten_bind_PointCloud_num_attributes_0.apply(null,arguments)},jd=a._emscripten_bind_PointCloud_num_points_0=function(){return a.asm._emscripten_bind_PointCloud_num_points_0.apply(null, arguments)},nb=a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)};a._free=function(){return a.asm._free.apply(null,arguments)};a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)};var Ka=a._malloc=function(){return a.asm._malloc.apply(null,arguments)};a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)};a._memmove=function(){return a.asm._memmove.apply(null,arguments)};a._memset=function(){return a.asm._memset.apply(null,
arguments)},kd=a._emscripten_bind_Status___destroy___0=function(){return a.asm._emscripten_bind_Status___destroy___0.apply(null,arguments)},ld=a._emscripten_bind_Status_code_0=function(){return a.asm._emscripten_bind_Status_code_0.apply(null,arguments)},md=a._emscripten_bind_Status_error_msg_0=function(){return a.asm._emscripten_bind_Status_error_msg_0.apply(null,arguments)},nd=a._emscripten_bind_Status_ok_0=function(){return a.asm._emscripten_bind_Status_ok_0.apply(null,arguments)},od=a._emscripten_bind_VoidPtr___destroy___0= arguments)};a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)};a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)};a.getTempRet0=function(){return a.asm.getTempRet0.apply(null,arguments)};a.runPostSets=function(){return a.asm.runPostSets.apply(null,arguments)};var sa=a.setTempRet0=function(){return a.asm.setTempRet0.apply(null,arguments)};a.setThrew=function(){return a.asm.setThrew.apply(null,arguments)};a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,
function(){return a.asm._emscripten_bind_VoidPtr___destroy___0.apply(null,arguments)},pd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM.apply(null,arguments)},qd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM.apply(null,arguments)},rd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM= arguments)};a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)};a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)};a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)};a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)};a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)};a.dynCall_iiiiiii=function(){return a.asm.dynCall_iiiiiii.apply(null,arguments)};a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,
function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM.apply(null,arguments)},sd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM.apply(null,arguments)},td=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE.apply(null, arguments)};a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)};a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)};a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)};a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)};a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)};a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)};a.asm=Ua;a.then=function(d){if(a.calledRun)d(a);
arguments)},ud=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD.apply(null,arguments)},vd=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH.apply(null,arguments)},wd=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_COLOR.apply(null,arguments)},xd= else{var b=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){b&&b();d(a)}}return a};na.prototype=Error();na.prototype.constructor=na;ra=function b(){a.calledRun||wa();a.calledRun||(ra=b)};a.run=wa;a.exit=function(b,c){if(!c||!a.noExitRuntime||0!==b){if(!a.noExitRuntime&&(oa=!0,ta=void 0,B(ob),a.onExit))a.onExit(b);qa&&process.exit(b);a.quit(b,new na(b))}};a.abort=O;if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();a.noExitRuntime=!0;
a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_GENERIC.apply(null,arguments)},yd=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_INVALID.apply(null,arguments)},zd=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_NORMAL.apply(null,arguments)},Ad=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION= wa();m.prototype=Object.create(m.prototype);m.prototype.constructor=m;m.prototype.__class__=m;m.__cache__={};a.WrapperObject=m;a.getCache=t;a.wrapPointer=T;a.castObject=function(a,c){return T(a.ptr,c)};a.NULL=T(0);a.destroy=function(a){if(!a.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";a.__destroy__();delete t(a.__class__)[a.ptr]};a.compare=function(a,c){return a.ptr===c.ptr};a.getPointer=function(a){return a.ptr};a.getClass=function(a){return a.__class__};var l=
function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_POSITION.apply(null,arguments)},Bd=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD.apply(null,arguments)},Cd=a._emscripten_enum_draco_StatusCode_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_ERROR.apply(null,arguments)},Dd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return a.asm._emscripten_enum_draco_StatusCode_INVALID_PARAMETER.apply(null, {buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(l.needed){for(var b=0;b<l.temps.length;b++)a._free(l.temps[b]);l.temps.length=0;a._free(l.buffer);l.buffer=0;l.size+=l.needed;l.needed=0}l.buffer||(l.size+=128,l.buffer=a._malloc(l.size),f(l.buffer));l.pos=0},alloc:function(b,c){f(l.buffer);b=b.length*c.BYTES_PER_ELEMENT;b=b+7&-8;l.pos+b>=l.size?(f(0<b),l.needed+=b,c=a._malloc(b),l.temps.push(c)):(c=l.buffer+l.pos,l.pos+=b);return c},copy:function(a,c,d){switch(c.BYTES_PER_ELEMENT){case 2:d>>=
arguments)},Ed=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_IO_ERROR.apply(null,arguments)},Fd=a._emscripten_enum_draco_StatusCode_OK=function(){return a.asm._emscripten_enum_draco_StatusCode_OK.apply(null,arguments)},Gd=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION.apply(null,arguments)},Hd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION.apply(null, 1;break;case 4:d>>=2;break;case 8:d>>=3}for(var b=0;b<a.length;b++)c[d+b]=a[b]}};z.prototype=Object.create(m.prototype);z.prototype.constructor=z;z.prototype.__class__=z;z.__cache__={};a.Status=z;z.prototype.code=z.prototype.code=function(){return Zc(this.ptr)};z.prototype.ok=z.prototype.ok=function(){return!!ad(this.ptr)};z.prototype.error_msg=z.prototype.error_msg=function(){return v($c(this.ptr))};z.prototype.__destroy__=z.prototype.__destroy__=function(){Yc(this.ptr)};F.prototype=Object.create(m.prototype);
arguments)};a._emscripten_get_global_libc=function(){return a.asm._emscripten_get_global_libc.apply(null,arguments)};var Db=a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)};a._free=function(){return a.asm._free.apply(null,arguments)};a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)};var Ta=a._malloc=function(){return a.asm._malloc.apply(null,arguments)};a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)}; F.prototype.constructor=F;F.prototype.__class__=F;F.__cache__={};a.DracoUInt16Array=F;F.prototype.GetValue=F.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return mc(b,a)};F.prototype.size=F.prototype.size=function(){return oc(this.ptr)};F.prototype.__destroy__=F.prototype.__destroy__=function(){nc(this.ptr)};G.prototype=Object.create(m.prototype);G.prototype.constructor=G;G.prototype.__class__=G;G.__cache__={};a.PointCloud=G;G.prototype.num_attributes=G.prototype.num_attributes=
a._memmove=function(){return a.asm._memmove.apply(null,arguments)};a._memset=function(){return a.asm._memset.apply(null,arguments)};a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)};a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)};a.getTempRet0=function(){return a.asm.getTempRet0.apply(null,arguments)};a.runPostSets=function(){return a.asm.runPostSets.apply(null,arguments)};a.setTempRet0=function(){return a.asm.setTempRet0.apply(null,arguments)}; function(){return Wc(this.ptr)};G.prototype.num_points=G.prototype.num_points=function(){return Xc(this.ptr)};G.prototype.__destroy__=G.prototype.__destroy__=function(){Vc(this.ptr)};H.prototype=Object.create(m.prototype);H.prototype.constructor=H;H.prototype.__class__=H;H.__cache__={};a.DracoUInt8Array=H;H.prototype.GetValue=H.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return sc(b,a)};H.prototype.size=H.prototype.size=function(){return uc(this.ptr)};H.prototype.__destroy__=
a.setThrew=function(){return a.asm.setThrew.apply(null,arguments)};a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)};a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)};a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)};a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)};a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)};a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)}; H.prototype.__destroy__=function(){tc(this.ptr)};I.prototype=Object.create(m.prototype);I.prototype.constructor=I;I.prototype.__class__=I;I.__cache__={};a.DracoUInt32Array=I;I.prototype.GetValue=I.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return pc(b,a)};I.prototype.size=I.prototype.size=function(){return rc(this.ptr)};I.prototype.__destroy__=I.prototype.__destroy__=function(){qc(this.ptr)};J.prototype=Object.create(m.prototype);J.prototype.constructor=J;J.prototype.__class__=
a.dynCall_iiiiiii=function(){return a.asm.dynCall_iiiiiii.apply(null,arguments)};a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)};a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)};a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)};a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)};a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)};a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null, J;J.__cache__={};a.AttributeOctahedronTransform=J;J.prototype.InitFromAttribute=J.prototype.InitFromAttribute=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!sb(b,a)};J.prototype.quantization_bits=J.prototype.quantization_bits=function(){return ub(this.ptr)};J.prototype.__destroy__=J.prototype.__destroy__=function(){tb(this.ptr)};n.prototype=Object.create(m.prototype);n.prototype.constructor=n;n.prototype.__class__=n;n.__cache__={};a.PointAttribute=n;n.prototype.size=n.prototype.size=
arguments)};a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)};m.stackAlloc=a.stackAlloc;m.stackSave=a.stackSave;m.stackRestore=a.stackRestore;m.establishStackSpace=a.establishStackSpace;m.setTempRet0=a.setTempRet0;m.getTempRet0=a.getTempRet0;a.asm=eb;if(V)if("function"===typeof a.locateFile?V=a.locateFile(V):a.memoryInitializerPrefixURL&&(V=a.memoryInitializerPrefixURL+V),pa||wa){var Id=a.readBinary(V);T.set(Id,m.GLOBAL_BASE)}else{var gb=function(){a.readAsync(V,fb, function(){return Tc(this.ptr)};n.prototype.GetAttributeTransformData=n.prototype.GetAttributeTransformData=function(){return T(Lc(this.ptr),P)};n.prototype.attribute_type=n.prototype.attribute_type=function(){return Nc(this.ptr)};n.prototype.data_type=n.prototype.data_type=function(){return Qc(this.ptr)};n.prototype.num_components=n.prototype.num_components=function(){return Sc(this.ptr)};n.prototype.normalized=n.prototype.normalized=function(){return!!Rc(this.ptr)};n.prototype.byte_stride=n.prototype.byte_stride=
function(){throw"could not load memory initializer "+V;})};la("memory initializer");var fb=function(d){d.byteLength&&(d=new Uint8Array(d));T.set(d,m.GLOBAL_BASE);a.memoryInitializerRequest&&delete a.memoryInitializerRequest.response;Na("memory initializer")};if(a.memoryInitializerRequest){var hb=function(){var d=a.memoryInitializerRequest,b=d.response;200!==d.status&&0!==d.status?(console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+d.status+", retrying "+ function(){return Pc(this.ptr)};n.prototype.byte_offset=n.prototype.byte_offset=function(){return Oc(this.ptr)};n.prototype.unique_id=n.prototype.unique_id=function(){return Uc(this.ptr)};n.prototype.__destroy__=n.prototype.__destroy__=function(){Mc(this.ptr)};P.prototype=Object.create(m.prototype);P.prototype.constructor=P;P.prototype.__class__=P;P.__cache__={};a.AttributeTransformData=P;P.prototype.transform_type=P.prototype.transform_type=function(){return Bb(this.ptr)};P.prototype.__destroy__=
V),gb()):fb(b)};a.memoryInitializerRequest.response?setTimeout(hb,0):a.memoryInitializerRequest.addEventListener("load",hb)}else gb()}a.then=function(d){if(a.calledRun)d(a);else{var b=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){b&&b();d(a)}}return a};ea.prototype=Error();ea.prototype.constructor=ea;var Za=null;sa=function b(){a.calledRun||Da();a.calledRun||(sa=b)};a.run=Da;a.exit=function(b,c){if(!c||!a.noExitRuntime){if(!a.noExitRuntime&&(ua=!0,U=void 0,u(db),a.onExit))a.onExit(b);pa&& P.prototype.__destroy__=function(){Ab(this.ptr)};x.prototype=Object.create(m.prototype);x.prototype.constructor=x;x.prototype.__class__=x;x.__cache__={};a.AttributeQuantizationTransform=x;x.prototype.InitFromAttribute=x.prototype.InitFromAttribute=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!vb(b,a)};x.prototype.quantization_bits=x.prototype.quantization_bits=function(){return yb(this.ptr)};x.prototype.min_value=x.prototype.min_value=function(a){var b=this.ptr;a&&"object"===
process.exit(b);a.quit(b,new ea(b))}};var ab=[];a.abort=W;if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();Da();p.prototype=Object.create(p.prototype);p.prototype.constructor=p;p.prototype.__class__=p;p.__cache__={};a.WrapperObject=p;a.getCache=t;a.wrapPointer=X;a.castObject=function(a,c){return X(a.ptr,c)};a.NULL=X(0);a.destroy=function(a){if(!a.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";a.__destroy__(); typeof a&&(a=a.ptr);return xb(b,a)};x.prototype.range=x.prototype.range=function(){return zb(this.ptr)};x.prototype.__destroy__=x.prototype.__destroy__=function(){wb(this.ptr)};K.prototype=Object.create(m.prototype);K.prototype.constructor=K;K.prototype.__class__=K;K.__cache__={};a.DracoInt8Array=K;K.prototype.GetValue=K.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return jc(b,a)};K.prototype.size=K.prototype.size=function(){return lc(this.ptr)};K.prototype.__destroy__=
delete t(a.__class__)[a.ptr]};a.compare=function(a,c){return a.ptr===c.ptr};a.getPointer=function(a){return a.ptr};a.getClass=function(a){return a.__class__};var k={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(k.needed){for(var b=0;b<k.temps.length;b++)a._free(k.temps[b]);k.temps.length=0;a._free(k.buffer);k.buffer=0;k.size+=k.needed;k.needed=0}k.buffer||(k.size+=128,k.buffer=a._malloc(k.size),f(k.buffer));k.pos=0},alloc:function(b,c){f(k.buffer);b=b.length*c.BYTES_PER_ELEMENT;b= K.prototype.__destroy__=function(){kc(this.ptr)};q.prototype=Object.create(m.prototype);q.prototype.constructor=q;q.prototype.__class__=q;q.__cache__={};a.MetadataQuerier=q;q.prototype.HasEntry=q.prototype.HasEntry=function(a,c){var b=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);return!!Fc(b,a,c)};q.prototype.HasIntEntry=q.prototype.HasIntEntry=function(a,c){var b=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);
b+7&-8;k.pos+b>=k.size?(f(0<b),k.needed+=b,c=a._malloc(b),k.temps.push(c)):(c=k.buffer+k.pos,k.pos+=b);return c},copy:function(a,c,d){switch(c.BYTES_PER_ELEMENT){case 2:d>>=1;break;case 4:d>>=2;break;case 8:d>>=3}for(var b=0;b<a.length;b++)c[d+b]=a[b]}};B.prototype=Object.create(p.prototype);B.prototype.constructor=B;B.prototype.__class__=B;B.__cache__={};a.Status=B;B.prototype.code=B.prototype.code=function(){return ld(this.ptr)};B.prototype.ok=B.prototype.ok=function(){return!!nd(this.ptr)};B.prototype.error_msg= return!!Gc(b,a,c)};q.prototype.GetIntEntry=q.prototype.GetIntEntry=function(a,c){var b=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);return Cc(b,a,c)};q.prototype.HasDoubleEntry=q.prototype.HasDoubleEntry=function(a,c){var b=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);return!!Ec(b,a,c)};q.prototype.GetDoubleEntry=q.prototype.GetDoubleEntry=function(a,c){var b=this.ptr;l.prepare();a&&"object"===typeof a&&(a=
B.prototype.error_msg=function(){return n(md(this.ptr))};B.prototype.__destroy__=B.prototype.__destroy__=function(){kd(this.ptr)};G.prototype=Object.create(p.prototype);G.prototype.constructor=G;G.prototype.__class__=G;G.__cache__={};a.DracoUInt16Array=G;G.prototype.GetValue=G.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return zc(b,a)};G.prototype.size=G.prototype.size=function(){return Bc(this.ptr)};G.prototype.__destroy__=G.prototype.__destroy__=function(){Ac(this.ptr)}; a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);return Ac(b,a,c)};q.prototype.HasStringEntry=q.prototype.HasStringEntry=function(a,c){var b=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);return!!Hc(b,a,c)};q.prototype.GetStringEntry=q.prototype.GetStringEntry=function(a,c){var b=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);return v(Dc(b,a,c))};q.prototype.NumEntries=q.prototype.NumEntries=function(a){var b=this.ptr;
H.prototype=Object.create(p.prototype);H.prototype.constructor=H;H.prototype.__class__=H;H.__cache__={};a.PointCloud=H;H.prototype.num_attributes=H.prototype.num_attributes=function(){return id(this.ptr)};H.prototype.num_points=H.prototype.num_points=function(){return jd(this.ptr)};H.prototype.__destroy__=H.prototype.__destroy__=function(){hd(this.ptr)};I.prototype=Object.create(p.prototype);I.prototype.constructor=I;I.prototype.__class__=I;I.__cache__={};a.DracoUInt8Array=I;I.prototype.GetValue= a&&"object"===typeof a&&(a=a.ptr);return Ic(b,a)};q.prototype.GetEntryName=q.prototype.GetEntryName=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return v(Bc(b,a,c))};q.prototype.__destroy__=q.prototype.__destroy__=function(){Jc(this.ptr)};L.prototype=Object.create(m.prototype);L.prototype.constructor=L;L.prototype.__class__=L;L.__cache__={};a.DracoInt16Array=L;L.prototype.GetValue=L.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&
I.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Fc(b,a)};I.prototype.size=I.prototype.size=function(){return Hc(this.ptr)};I.prototype.__destroy__=I.prototype.__destroy__=function(){Gc(this.ptr)};J.prototype=Object.create(p.prototype);J.prototype.constructor=J;J.prototype.__class__=J;J.__cache__={};a.DracoUInt32Array=J;J.prototype.GetValue=J.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Cc(b,a)};J.prototype.size=J.prototype.size= (a=a.ptr);return dc(b,a)};L.prototype.size=L.prototype.size=function(){return fc(this.ptr)};L.prototype.__destroy__=L.prototype.__destroy__=function(){ec(this.ptr)};M.prototype=Object.create(m.prototype);M.prototype.constructor=M;M.prototype.__class__=M;M.__cache__={};a.DracoFloat32Array=M;M.prototype.GetValue=M.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return ac(b,a)};M.prototype.size=M.prototype.size=function(){return cc(this.ptr)};M.prototype.__destroy__=M.prototype.__destroy__=
function(){return Ec(this.ptr)};J.prototype.__destroy__=J.prototype.__destroy__=function(){Dc(this.ptr)};K.prototype=Object.create(p.prototype);K.prototype.constructor=K;K.prototype.__class__=K;K.__cache__={};a.AttributeOctahedronTransform=K;K.prototype.InitFromAttribute=K.prototype.InitFromAttribute=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!Fb(b,a)};K.prototype.quantization_bits=K.prototype.quantization_bits=function(){return Hb(this.ptr)};K.prototype.__destroy__=K.prototype.__destroy__= function(){bc(this.ptr)};V.prototype=Object.create(m.prototype);V.prototype.constructor=V;V.prototype.__class__=V;V.__cache__={};a.GeometryAttribute=V;V.prototype.__destroy__=V.prototype.__destroy__=function(){vc(this.ptr)};Q.prototype=Object.create(m.prototype);Q.prototype.constructor=Q;Q.prototype.__class__=Q;Q.__cache__={};a.DecoderBuffer=Q;Q.prototype.Init=Q.prototype.Init=function(a,c){var b=this.ptr;l.prepare();if("object"==typeof a&&"object"===typeof a){var d=l.alloc(a,ia);l.copy(a,ia,d);a=
function(){Gb(this.ptr)};q.prototype=Object.create(p.prototype);q.prototype.constructor=q;q.prototype.__class__=q;q.__cache__={};a.PointAttribute=q;q.prototype.size=q.prototype.size=function(){return fd(this.ptr)};q.prototype.GetAttributeTransformData=q.prototype.GetAttributeTransformData=function(){return X(Yc(this.ptr),P)};q.prototype.attribute_type=q.prototype.attribute_type=function(){return $c(this.ptr)};q.prototype.data_type=q.prototype.data_type=function(){return cd(this.ptr)};q.prototype.num_components= d}c&&"object"===typeof c&&(c=c.ptr);Cb(b,a,c)};Q.prototype.__destroy__=Q.prototype.__destroy__=function(){Db(this.ptr)};g.prototype=Object.create(m.prototype);g.prototype.constructor=g;g.prototype.__class__=g;g.__cache__={};a.Decoder=g;g.prototype.GetEncodedGeometryType=g.prototype.GetEncodedGeometryType=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Vb(b,a)};g.prototype.DecodeBufferToPointCloud=g.prototype.DecodeBufferToPointCloud=function(a,c){var b=this.ptr;a&&"object"===typeof a&&
q.prototype.num_components=function(){return ed(this.ptr)};q.prototype.normalized=q.prototype.normalized=function(){return!!dd(this.ptr)};q.prototype.byte_stride=q.prototype.byte_stride=function(){return bd(this.ptr)};q.prototype.byte_offset=q.prototype.byte_offset=function(){return ad(this.ptr)};q.prototype.unique_id=q.prototype.unique_id=function(){return gd(this.ptr)};q.prototype.__destroy__=q.prototype.__destroy__=function(){Zc(this.ptr)};P.prototype=Object.create(p.prototype);P.prototype.constructor= (a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return T(Fb(b,a,c),z)};g.prototype.DecodeBufferToMesh=g.prototype.DecodeBufferToMesh=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return T(Eb(b,a,c),z)};g.prototype.GetAttributeId=g.prototype.GetAttributeId=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return Lb(b,a,c)};g.prototype.GetAttributeIdByName=g.prototype.GetAttributeIdByName=function(a,c){var b=
P;P.prototype.__class__=P;P.__cache__={};a.AttributeTransformData=P;P.prototype.transform_type=P.prototype.transform_type=function(){return Ob(this.ptr)};P.prototype.__destroy__=P.prototype.__destroy__=function(){Nb(this.ptr)};z.prototype=Object.create(p.prototype);z.prototype.constructor=z;z.prototype.__class__=z;z.__cache__={};a.AttributeQuantizationTransform=z;z.prototype.InitFromAttribute=z.prototype.InitFromAttribute=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!Ib(b,a)}; this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);return Kb(b,a,c)};g.prototype.GetAttributeIdByMetadataEntry=g.prototype.GetAttributeIdByMetadataEntry=function(a,c,d){var b=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:U(c);d=d&&"object"===typeof d?d.ptr:U(d);return Jb(b,a,c,d)};g.prototype.GetAttribute=g.prototype.GetAttribute=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=
z.prototype.quantization_bits=z.prototype.quantization_bits=function(){return Lb(this.ptr)};z.prototype.min_value=z.prototype.min_value=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Kb(b,a)};z.prototype.range=z.prototype.range=function(){return Mb(this.ptr)};z.prototype.__destroy__=z.prototype.__destroy__=function(){Jb(this.ptr)};L.prototype=Object.create(p.prototype);L.prototype.constructor=L;L.prototype.__class__=L;L.__cache__={};a.DracoInt8Array=L;L.prototype.GetValue=L.prototype.GetValue= c.ptr);return T(Ub(b,a,c),n)};g.prototype.GetAttributeByUniqueId=g.prototype.GetAttributeByUniqueId=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return T(Gb(b,a,c),n)};g.prototype.GetMetadata=g.prototype.GetMetadata=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return T(Xb(b,a),R)};g.prototype.GetAttributeMetadata=g.prototype.GetAttributeMetadata=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&
function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return wc(b,a)};L.prototype.size=L.prototype.size=function(){return yc(this.ptr)};L.prototype.__destroy__=L.prototype.__destroy__=function(){xc(this.ptr)};r.prototype=Object.create(p.prototype);r.prototype.constructor=r;r.prototype.__class__=r;r.__cache__={};a.MetadataQuerier=r;r.prototype.HasEntry=r.prototype.HasEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Sc(b, (c=c.ptr);return T(Qb(b,a,c),R)};g.prototype.GetFaceFromMesh=g.prototype.GetFaceFromMesh=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Wb(b,a,c,d)};g.prototype.GetTriangleStripsFromMesh=g.prototype.GetTriangleStripsFromMesh=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return Yb(b,a,c)};g.prototype.GetAttributeFloat=g.prototype.GetAttributeFloat=function(a,
a,c)};r.prototype.HasIntEntry=r.prototype.HasIntEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Tc(b,a,c)};r.prototype.GetIntEntry=r.prototype.GetIntEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Pc(b,a,c)};r.prototype.HasDoubleEntry=r.prototype.HasDoubleEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"=== c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Ib(b,a,c,d)};g.prototype.GetAttributeFloatForAllPoints=g.prototype.GetAttributeFloatForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Hb(b,a,c,d)};g.prototype.GetAttributeIntForAllPoints=g.prototype.GetAttributeIntForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===
typeof c?c.ptr:Y(c);return!!Rc(b,a,c)};r.prototype.GetDoubleEntry=r.prototype.GetDoubleEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Nc(b,a,c)};r.prototype.HasStringEntry=r.prototype.HasStringEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Uc(b,a,c)};r.prototype.GetStringEntry=r.prototype.GetStringEntry=function(a,c){var b=this.ptr;k.prepare(); typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Pb(b,a,c,d)};g.prototype.GetAttributeInt8ForAllPoints=g.prototype.GetAttributeInt8ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Ob(b,a,c,d)};g.prototype.GetAttributeUInt8ForAllPoints=g.prototype.GetAttributeUInt8ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===
a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return n(Qc(b,a,c))};r.prototype.NumEntries=r.prototype.NumEntries=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Vc(b,a)};r.prototype.GetEntryName=r.prototype.GetEntryName=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return n(Oc(b,a,c))};r.prototype.__destroy__=r.prototype.__destroy__=function(){Wc(this.ptr)};M.prototype=Object.create(p.prototype);M.prototype.constructor= typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Tb(b,a,c,d)};g.prototype.GetAttributeInt16ForAllPoints=g.prototype.GetAttributeInt16ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Mb(b,a,c,d)};g.prototype.GetAttributeUInt16ForAllPoints=g.prototype.GetAttributeUInt16ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&
M;M.prototype.__class__=M;M.__cache__={};a.DracoInt16Array=M;M.prototype.GetValue=M.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return qc(b,a)};M.prototype.size=M.prototype.size=function(){return sc(this.ptr)};M.prototype.__destroy__=M.prototype.__destroy__=function(){rc(this.ptr)};N.prototype=Object.create(p.prototype);N.prototype.constructor=N;N.prototype.__class__=N;N.__cache__={};a.DracoFloat32Array=N;N.prototype.GetValue=N.prototype.GetValue=function(a){var b= "object"===typeof d&&(d=d.ptr);return!!Rb(b,a,c,d)};g.prototype.GetAttributeInt32ForAllPoints=g.prototype.GetAttributeInt32ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Nb(b,a,c,d)};g.prototype.GetAttributeUInt32ForAllPoints=g.prototype.GetAttributeUInt32ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=
this.ptr;a&&"object"===typeof a&&(a=a.ptr);return nc(b,a)};N.prototype.size=N.prototype.size=function(){return pc(this.ptr)};N.prototype.__destroy__=N.prototype.__destroy__=function(){oc(this.ptr)};Z.prototype=Object.create(p.prototype);Z.prototype.constructor=Z;Z.prototype.__class__=Z;Z.__cache__={};a.GeometryAttribute=Z;Z.prototype.__destroy__=Z.prototype.__destroy__=function(){Ic(this.ptr)};R.prototype=Object.create(p.prototype);R.prototype.constructor=R;R.prototype.__class__=R;R.__cache__={}; d.ptr);return!!Sb(b,a,c,d)};g.prototype.SkipAttributeTransform=g.prototype.SkipAttributeTransform=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);Zb(b,a)};g.prototype.__destroy__=g.prototype.__destroy__=function(){$b(this.ptr)};C.prototype=Object.create(m.prototype);C.prototype.constructor=C;C.prototype.__class__=C;C.__cache__={};a.Mesh=C;C.prototype.num_faces=C.prototype.num_faces=function(){return yc(this.ptr)};C.prototype.num_attributes=C.prototype.num_attributes=function(){return xc(this.ptr)};
a.DecoderBuffer=R;R.prototype.Init=R.prototype.Init=function(a,c){var b=this.ptr;k.prepare();if("object"==typeof a&&"object"===typeof a){var d=k.alloc(a,fa);k.copy(a,fa,d);a=d}c&&"object"===typeof c&&(c=c.ptr);Pb(b,a,c)};R.prototype.__destroy__=R.prototype.__destroy__=function(){Qb(this.ptr)};h.prototype=Object.create(p.prototype);h.prototype.constructor=h;h.prototype.__class__=h;h.__cache__={};a.Decoder=h;h.prototype.GetEncodedGeometryType=h.prototype.GetEncodedGeometryType=function(a){var b=this.ptr; C.prototype.num_points=C.prototype.num_points=function(){return zc(this.ptr)};C.prototype.__destroy__=C.prototype.__destroy__=function(){wc(this.ptr)};X.prototype=Object.create(m.prototype);X.prototype.constructor=X;X.prototype.__class__=X;X.__cache__={};a.VoidPtr=X;X.prototype.__destroy__=X.prototype.__destroy__=function(){bd(this.ptr)};N.prototype=Object.create(m.prototype);N.prototype.constructor=N;N.prototype.__class__=N;N.__cache__={};a.DracoInt32Array=N;N.prototype.GetValue=N.prototype.GetValue=
a&&"object"===typeof a&&(a=a.ptr);return hc(b,a)};h.prototype.DecodeBufferToPointCloud=h.prototype.DecodeBufferToPointCloud=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Sb(b,a,c),B)};h.prototype.DecodeBufferToMesh=h.prototype.DecodeBufferToMesh=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Rb(b,a,c),B)};h.prototype.GetAttributeId=h.prototype.GetAttributeId=function(a,c){var b=this.ptr; function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return gc(b,a)};N.prototype.size=N.prototype.size=function(){return ic(this.ptr)};N.prototype.__destroy__=N.prototype.__destroy__=function(){hc(this.ptr)};R.prototype=Object.create(m.prototype);R.prototype.constructor=R;R.prototype.__class__=R;R.__cache__={};a.Metadata=R;R.prototype.__destroy__=R.prototype.__destroy__=function(){Kc(this.ptr)};(function(){function b(){a.OK=sd();a.ERROR=pd();a.IO_ERROR=rd();a.INVALID_PARAMETER=qd();a.UNSUPPORTED_VERSION=
a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return Yb(b,a,c)};h.prototype.GetAttributeIdByName=h.prototype.GetAttributeIdByName=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Xb(b,a,c)};h.prototype.GetAttributeIdByMetadataEntry=h.prototype.GetAttributeIdByMetadataEntry=function(a,c,d){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);d=d&&"object"===typeof d? ud();a.UNKNOWN_VERSION=td();a.INVALID_GEOMETRY_TYPE=gd();a.POINT_CLOUD=hd();a.TRIANGULAR_MESH=id();a.ATTRIBUTE_INVALID_TRANSFORM=cd();a.ATTRIBUTE_NO_TRANSFORM=dd();a.ATTRIBUTE_QUANTIZATION_TRANSFORM=fd();a.ATTRIBUTE_OCTAHEDRON_TRANSFORM=ed();a.INVALID=ld();a.POSITION=nd();a.NORMAL=md();a.COLOR=jd();a.TEX_COORD=od();a.GENERIC=kd()}a.calledRun?b():Na.unshift(b)})();if("function"===typeof a.onModuleParsed)a.onModuleParsed();return d};
d.ptr:Y(d);return Wb(b,a,c,d)};h.prototype.GetAttribute=h.prototype.GetAttribute=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(gc(b,a,c),q)};h.prototype.GetAttributeByUniqueId=h.prototype.GetAttributeByUniqueId=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Tb(b,a,c),q)};h.prototype.GetMetadata=h.prototype.GetMetadata=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return X(jc(b, "object"===typeof exports&&"object"===typeof module?module.exports=DracoDecoderModule:"function"===typeof define&&define.amd?define([],function(){return DracoDecoderModule}):"object"===typeof exports&&(exports.DracoDecoderModule=DracoDecoderModule);
a),S)};h.prototype.GetAttributeMetadata=h.prototype.GetAttributeMetadata=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(cc(b,a,c),S)};h.prototype.GetFaceFromMesh=h.prototype.GetFaceFromMesh=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ic(b,a,c,d)};h.prototype.GetTriangleStripsFromMesh=h.prototype.GetTriangleStripsFromMesh=function(a,c){var b=this.ptr;
a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return kc(b,a,c)};h.prototype.GetAttributeFloat=h.prototype.GetAttributeFloat=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Vb(b,a,c,d)};h.prototype.GetAttributeFloatForAllPoints=h.prototype.GetAttributeFloatForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&
(d=d.ptr);return!!Ub(b,a,c,d)};h.prototype.GetAttributeIntForAllPoints=h.prototype.GetAttributeIntForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!bc(b,a,c,d)};h.prototype.GetAttributeInt8ForAllPoints=h.prototype.GetAttributeInt8ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ac(b,a,c,d)};
h.prototype.GetAttributeUInt8ForAllPoints=h.prototype.GetAttributeUInt8ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!fc(b,a,c,d)};h.prototype.GetAttributeInt16ForAllPoints=h.prototype.GetAttributeInt16ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Zb(b,a,c,d)};h.prototype.GetAttributeUInt16ForAllPoints=
h.prototype.GetAttributeUInt16ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!dc(b,a,c,d)};h.prototype.GetAttributeInt32ForAllPoints=h.prototype.GetAttributeInt32ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!$b(b,a,c,d)};h.prototype.GetAttributeUInt32ForAllPoints=h.prototype.GetAttributeUInt32ForAllPoints=
function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ec(b,a,c,d)};h.prototype.SkipAttributeTransform=h.prototype.SkipAttributeTransform=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);lc(b,a)};h.prototype.__destroy__=h.prototype.__destroy__=function(){mc(this.ptr)};C.prototype=Object.create(p.prototype);C.prototype.constructor=C;C.prototype.__class__=C;C.__cache__={};a.Mesh=C;C.prototype.num_faces=
C.prototype.num_faces=function(){return Lc(this.ptr)};C.prototype.num_attributes=C.prototype.num_attributes=function(){return Kc(this.ptr)};C.prototype.num_points=C.prototype.num_points=function(){return Mc(this.ptr)};C.prototype.__destroy__=C.prototype.__destroy__=function(){Jc(this.ptr)};ca.prototype=Object.create(p.prototype);ca.prototype.constructor=ca;ca.prototype.__class__=ca;ca.__cache__={};a.VoidPtr=ca;ca.prototype.__destroy__=ca.prototype.__destroy__=function(){od(this.ptr)};O.prototype=
Object.create(p.prototype);O.prototype.constructor=O;O.prototype.__class__=O;O.__cache__={};a.DracoInt32Array=O;O.prototype.GetValue=O.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return tc(b,a)};O.prototype.size=O.prototype.size=function(){return vc(this.ptr)};O.prototype.__destroy__=O.prototype.__destroy__=function(){uc(this.ptr)};S.prototype=Object.create(p.prototype);S.prototype.constructor=S;S.prototype.__class__=S;S.__cache__={};a.Metadata=S;S.prototype.__destroy__=
S.prototype.__destroy__=function(){Xc(this.ptr)};(function(){function b(){a.OK=Fd();a.ERROR=Cd();a.IO_ERROR=Ed();a.INVALID_PARAMETER=Dd();a.UNSUPPORTED_VERSION=Hd();a.UNKNOWN_VERSION=Gd();a.INVALID_GEOMETRY_TYPE=td();a.POINT_CLOUD=ud();a.TRIANGULAR_MESH=vd();a.ATTRIBUTE_INVALID_TRANSFORM=pd();a.ATTRIBUTE_NO_TRANSFORM=qd();a.ATTRIBUTE_QUANTIZATION_TRANSFORM=sd();a.ATTRIBUTE_OCTAHEDRON_TRANSFORM=rd();a.INVALID=yd();a.POSITION=Ad();a.NORMAL=zd();a.COLOR=wd();a.TEX_COORD=Bd();a.GENERIC=xd()}a.calledRun?
b():Xa.unshift(b)})();if("function"===typeof a.onModuleParsed)a.onModuleParsed();return d};"object"===typeof module&&module.exports&&(module.exports=DracoDecoderModule);

View File

@ -1,129 +1,119 @@
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(d,f,n){d!=Array.prototype&&d!=Object.prototype&&(d[f]=n.value)};$jscomp.getGlobal=function(d){return"undefined"!=typeof window&&window===d?d:"undefined"!=typeof global&&null!=global?global:d};$jscomp.global=$jscomp.getGlobal(this); var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(d,k,f){d!=Array.prototype&&d!=Object.prototype&&(d[k]=f.value)};$jscomp.getGlobal=function(d){return"undefined"!=typeof window&&window===d?d:"undefined"!=typeof global&&null!=global?global:d};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.polyfill=function(d,f,n,v){if(f){n=$jscomp.global;d=d.split(".");for(v=0;v<d.length-1;v++){var g=d[v];g in n||(n[g]={});n=n[g]}d=d[d.length-1];v=n[d];f=f(v);f!=v&&null!=f&&$jscomp.defineProperty(n,d,{configurable:!0,writable:!0,value:f})}};$jscomp.polyfill("Math.imul",function(d){return d?d:function(f,d){f=Number(f);d=Number(d);var n=f&65535,g=d&65535;return n*g+((f>>>16&65535)*g+n*(d>>>16&65535)<<16>>>0)|0}},"es6","es3"); $jscomp.polyfill=function(d,k,f,u){if(k){f=$jscomp.global;d=d.split(".");for(u=0;u<d.length-1;u++){var h=d[u];h in f||(f[h]={});f=f[h]}d=d[d.length-1];u=f[d];k=k(u);k!=u&&null!=k&&$jscomp.defineProperty(f,d,{configurable:!0,writable:!0,value:k})}};$jscomp.polyfill("Math.imul",function(d){return d?d:function(d,f){d=Number(d);f=Number(f);var k=d&65535,h=f&65535;return k*h+((d>>>16&65535)*h+k*(f>>>16&65535)<<16>>>0)|0}},"es6","es3");
$jscomp.polyfill("Math.clz32",function(d){return d?d:function(f){f=Number(f)>>>0;if(0===f)return 32;var d=0;0===(f&4294901760)&&(f<<=16,d+=16);0===(f&4278190080)&&(f<<=8,d+=8);0===(f&4026531840)&&(f<<=4,d+=4);0===(f&3221225472)&&(f<<=2,d+=2);0===(f&2147483648)&&d++;return d}},"es6","es3");$jscomp.polyfill("Math.trunc",function(d){return d?d:function(d){d=Number(d);if(isNaN(d)||Infinity===d||-Infinity===d||0===d)return d;var f=Math.floor(Math.abs(d));return 0>d?-f:f}},"es6","es3"); $jscomp.polyfill("Math.clz32",function(d){return d?d:function(d){d=Number(d)>>>0;if(0===d)return 32;var f=0;0===(d&4294901760)&&(d<<=16,f+=16);0===(d&4278190080)&&(d<<=8,f+=8);0===(d&4026531840)&&(d<<=4,f+=4);0===(d&3221225472)&&(d<<=2,f+=2);0===(d&2147483648)&&f++;return f}},"es6","es3");$jscomp.polyfill("Math.trunc",function(d){return d?d:function(d){d=Number(d);if(isNaN(d)||Infinity===d||-Infinity===d||0===d)return d;var f=Math.floor(Math.abs(d));return 0>d?-f:f}},"es6","es3");
$jscomp.SYMBOL_PREFIX="jscomp_symbol_";$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(d){return $jscomp.SYMBOL_PREFIX+(d||"")+$jscomp.symbolCounter_++}; $jscomp.SYMBOL_PREFIX="jscomp_symbol_";$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.Symbol=function(){var d=0;return function(k){return $jscomp.SYMBOL_PREFIX+(k||"")+d++}}();
$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var d=$jscomp.global.Symbol.iterator;d||(d=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[d]&&$jscomp.defineProperty(Array.prototype,d,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(d){var f=0;return $jscomp.iteratorPrototype(function(){return f<d.length?{done:!1,value:d[f++]}:{done:!0}})}; $jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var d=$jscomp.global.Symbol.iterator;d||(d=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[d]&&$jscomp.defineProperty(Array.prototype,d,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(d){var k=0;return $jscomp.iteratorPrototype(function(){return k<d.length?{done:!1,value:d[k++]}:{done:!0}})};
$jscomp.iteratorPrototype=function(d){$jscomp.initSymbolIterator();d={next:d};d[$jscomp.global.Symbol.iterator]=function(){return this};return d};$jscomp.makeIterator=function(d){$jscomp.initSymbolIterator();var f=d[Symbol.iterator];return f?f.call(d):$jscomp.arrayIterator(d)};$jscomp.FORCE_POLYFILL_PROMISE=!1; $jscomp.iteratorPrototype=function(d){$jscomp.initSymbolIterator();d={next:d};d[$jscomp.global.Symbol.iterator]=function(){return this};return d};$jscomp.makeIterator=function(d){$jscomp.initSymbolIterator();var k=d[Symbol.iterator];return k?k.call(d):$jscomp.arrayIterator(d)};$jscomp.FORCE_POLYFILL_PROMISE=!1;
$jscomp.polyfill("Promise",function(d){function f(){this.batch_=null}function n(d){return d instanceof g?d:new g(function(f,D){f(d)})}if(d&&!$jscomp.FORCE_POLYFILL_PROMISE)return d;f.prototype.asyncExecute=function(d){null==this.batch_&&(this.batch_=[],this.asyncExecuteBatch_());this.batch_.push(d);return this};f.prototype.asyncExecuteBatch_=function(){var d=this;this.asyncExecuteFunction(function(){d.executeBatch_()})};var v=$jscomp.global.setTimeout;f.prototype.asyncExecuteFunction=function(d){v(d, $jscomp.polyfill("Promise",function(d){function k(){this.batch_=null}function f(d){return d instanceof h?d:new h(function(r,f){r(d)})}if(d&&!$jscomp.FORCE_POLYFILL_PROMISE)return d;k.prototype.asyncExecute=function(d){null==this.batch_&&(this.batch_=[],this.asyncExecuteBatch_());this.batch_.push(d);return this};k.prototype.asyncExecuteBatch_=function(){var d=this;this.asyncExecuteFunction(function(){d.executeBatch_()})};var u=$jscomp.global.setTimeout;k.prototype.asyncExecuteFunction=function(d){u(d,
0)};f.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var d=this.batch_;this.batch_=[];for(var f=0;f<d.length;++f){var g=d[f];delete d[f];try{g()}catch(la){this.asyncThrow_(la)}}}this.batch_=null};f.prototype.asyncThrow_=function(d){this.asyncExecuteFunction(function(){throw d;})};var g=function(d){this.state_=0;this.result_=void 0;this.onSettledCallbacks_=[];var f=this.createResolveAndReject_();try{d(f.resolve,f.reject)}catch(u){f.reject(u)}};g.prototype.createResolveAndReject_= 0)};k.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var d=this.batch_;this.batch_=[];for(var B=0;B<d.length;++B){var f=d[B];delete d[B];try{f()}catch(v){this.asyncThrow_(v)}}}this.batch_=null};k.prototype.asyncThrow_=function(d){this.asyncExecuteFunction(function(){throw d;})};var h=function(d){this.state_=0;this.result_=void 0;this.onSettledCallbacks_=[];var r=this.createResolveAndReject_();try{d(r.resolve,r.reject)}catch(Y){r.reject(Y)}};h.prototype.createResolveAndReject_=
function(){function d(d){return function(D){g||(g=!0,d.call(f,D))}}var f=this,g=!1;return{resolve:d(this.resolveTo_),reject:d(this.reject_)}};g.prototype.resolveTo_=function(d){if(d===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof g)this.settleSameAsPromise_(d);else{a:switch(typeof d){case "object":var f=null!=d;break a;case "function":f=!0;break a;default:f=!1}f?this.resolveToNonPromiseObj_(d):this.fulfill_(d)}};g.prototype.resolveToNonPromiseObj_=function(d){var f= function(){function d(d){return function(r){h||(h=!0,d.call(f,r))}}var f=this,h=!1;return{resolve:d(this.resolveTo_),reject:d(this.reject_)}};h.prototype.resolveTo_=function(d){if(d===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof h)this.settleSameAsPromise_(d);else{a:switch(typeof d){case "object":var f=null!=d;break a;case "function":f=!0;break a;default:f=!1}f?this.resolveToNonPromiseObj_(d):this.fulfill_(d)}};h.prototype.resolveToNonPromiseObj_=function(d){var f=
void 0;try{f=d.then}catch(u){this.reject_(u);return}"function"==typeof f?this.settleSameAsThenable_(f,d):this.fulfill_(d)};g.prototype.reject_=function(d){this.settle_(2,d)};g.prototype.fulfill_=function(d){this.settle_(1,d)};g.prototype.settle_=function(d,f){if(0!=this.state_)throw Error("Cannot settle("+d+", "+f|"): Promise already settled in state"+this.state_);this.state_=d;this.result_=f;this.executeOnSettledCallbacks_()};g.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var d= void 0;try{f=d.then}catch(Y){this.reject_(Y);return}"function"==typeof f?this.settleSameAsThenable_(f,d):this.fulfill_(d)};h.prototype.reject_=function(d){this.settle_(2,d)};h.prototype.fulfill_=function(d){this.settle_(1,d)};h.prototype.settle_=function(d,f){if(0!=this.state_)throw Error("Cannot settle("+d+", "+f|"): Promise already settled in state"+this.state_);this.state_=d;this.result_=f;this.executeOnSettledCallbacks_()};h.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var d=
this.onSettledCallbacks_,f=0;f<d.length;++f)d[f].call(),d[f]=null;this.onSettledCallbacks_=null}};var ma=new f;g.prototype.settleSameAsPromise_=function(d){var f=this.createResolveAndReject_();d.callWhenSettled_(f.resolve,f.reject)};g.prototype.settleSameAsThenable_=function(d,f){var g=this.createResolveAndReject_();try{d.call(f,g.resolve,g.reject)}catch(la){g.reject(la)}};g.prototype.then=function(d,f){function u(d,f){return"function"==typeof d?function(f){try{n(d(f))}catch(ea){D(ea)}}:f}var n,D, this.onSettledCallbacks_,f=0;f<d.length;++f)d[f].call(),d[f]=null;this.onSettledCallbacks_=null}};var ha=new k;h.prototype.settleSameAsPromise_=function(d){var f=this.createResolveAndReject_();d.callWhenSettled_(f.resolve,f.reject)};h.prototype.settleSameAsThenable_=function(d,f){var h=this.createResolveAndReject_();try{d.call(f,h.resolve,h.reject)}catch(v){h.reject(v)}};h.prototype.then=function(d,f){function k(d,f){return"function"==typeof d?function(f){try{v(d(f))}catch(O){r(O)}}:f}var v,r,B=new h(function(d,
v=new g(function(d,f){n=d;D=f});this.callWhenSettled_(u(d,n),u(f,D));return v};g.prototype.catch=function(d){return this.then(void 0,d)};g.prototype.callWhenSettled_=function(d,f){function g(){switch(n.state_){case 1:d(n.result_);break;case 2:f(n.result_);break;default:throw Error("Unexpected state: "+n.state_);}}var n=this;null==this.onSettledCallbacks_?ma.asyncExecute(g):this.onSettledCallbacks_.push(function(){ma.asyncExecute(g)})};g.resolve=n;g.reject=function(d){return new g(function(f,g){g(d)})}; f){v=d;r=f});this.callWhenSettled_(k(d,v),k(f,r));return B};h.prototype.catch=function(d){return this.then(void 0,d)};h.prototype.callWhenSettled_=function(d,f){function h(){switch(k.state_){case 1:d(k.result_);break;case 2:f(k.result_);break;default:throw Error("Unexpected state: "+k.state_);}}var k=this;null==this.onSettledCallbacks_?ha.asyncExecute(h):this.onSettledCallbacks_.push(function(){ha.asyncExecute(h)})};h.resolve=f;h.reject=function(d){return new h(function(f,h){h(d)})};h.race=function(d){return new h(function(h,
g.race=function(d){return new g(function(f,g){for(var u=$jscomp.makeIterator(d),v=u.next();!v.done;v=u.next())n(v.value).callWhenSettled_(f,g)})};g.all=function(d){var f=$jscomp.makeIterator(d),u=f.next();return u.done?n([]):new g(function(d,g){function v(f){return function(g){D[f]=g;Q--;0==Q&&d(D)}}var D=[],Q=0;do D.push(void 0),Q++,n(u.value).callWhenSettled_(v(D.length-1),g),u=f.next();while(!u.done)})};return g},"es6","es3"); k){for(var v=$jscomp.makeIterator(d),r=v.next();!r.done;r=v.next())f(r.value).callWhenSettled_(h,k)})};h.all=function(d){var k=$jscomp.makeIterator(d),r=k.next();return r.done?f([]):new h(function(d,h){function v(f){return function(h){u[f]=h;B--;0==B&&d(u)}}var u=[],B=0;do u.push(void 0),B++,f(r.value).callWhenSettled_(v(u.length-1),h),r=k.next();while(!r.done)})};return h},"es6","es3");
var DracoDecoderModule=function(d){function f(a,b){a||W("Assertion failed: "+b)}function n(e,b){if(0===b||!e)return"";for(var c=0,l,d=0;;){l=T[e+d>>0];c|=l;if(0==l&&!b)break;d++;if(b&&d==b)break}b||(b=d);l="";if(128>c){for(;0<b;)c=String.fromCharCode.apply(String,T.subarray(e,e+Math.min(b,1024))),l=l?l+c:c,e+=1024,b-=1024;return l}return a.UTF8ToString(e)}function v(a){return a.replace(/__Z[\w\d_]+/g,function(a){return a===a?a:a+" ["+a+"]"})}function g(){a:{var e=Error();if(!e.stack){try{throw Error(0); var DracoDecoderModule=function(d){function k(a,c){c||(c=16);return Math.ceil(a/c)*c}function f(a,c){a||O("Assertion failed: "+c)}function u(a,c){if(0===c||!a)return"";for(var b=0,e,d=0;;){e=W[a+d>>0];b|=e;if(0==e&&!c)break;d++;if(c&&d==c)break}c||(c=d);e="";if(128>b){for(;0<c;)b=String.fromCharCode.apply(String,W.subarray(a,a+Math.min(c,1024))),e=e?e+b:b,a+=1024,c-=1024;return e}return h(W,a)}function h(a,c){for(var b=c;a[b];)++b;if(16<b-c&&a.subarray&&Ia)return Ia.decode(a.subarray(c,b));for(b=
}catch(b){e=b}if(!e.stack){e="(no stack trace available)";break a}}e=e.stack.toString()}a.extraStackTrace&&(e+="\n"+a.extraStackTrace());return v(e)}function ma(a,b){0<a%b&&(a+=b-a%b);return a}function D(){a.HEAP8=fa=new Int8Array(F);a.HEAP16=za=new Int16Array(F);a.HEAP32=x=new Int32Array(F);a.HEAPU8=T=new Uint8Array(F);a.HEAPU16=Oa=new Uint16Array(F);a.HEAPU32=Pa=new Uint32Array(F);a.HEAPF32=Qa=new Float32Array(F);a.HEAPF64=Ra=new Float64Array(F)}function Ma(){var e=a.usingWasm?Aa:Sa,b=2147483648- "";;){var e=a[c++];if(!e)return b;if(e&128){var d=a[c++]&63;if(192==(e&224))b+=String.fromCharCode((e&31)<<6|d);else{var f=a[c++]&63;if(224==(e&240))e=(e&15)<<12|d<<6|f;else{var g=a[c++]&63;if(240==(e&248))e=(e&7)<<18|d<<12|f<<6|g;else{var h=a[c++]&63;if(248==(e&252))e=(e&3)<<24|d<<18|f<<12|g<<6|h;else{var k=a[c++]&63;e=(e&1)<<30|d<<24|f<<18|g<<12|h<<6|k}}}65536>e?b+=String.fromCharCode(e):(e-=65536,b+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else b+=String.fromCharCode(e)}}function ha(a,c){0<
e;if(x[ba>>2]>b)return!1;var c=y;for(y=Math.max(y,ib);y<x[ba>>2];)y=536870912>=y?ma(2*y,e):Math.min(ma((3*y+2147483648)/4,e),b);e=a.reallocBuffer(y);if(!e||e.byteLength!=y)return y=c,!1;a.buffer=F=e;D();return!0}function u(e){for(;0<e.length;){var b=e.shift();if("function"==typeof b)b();else{var c=b.func;"number"===typeof c?void 0===b.arg?a.dynCall_v(c):a.dynCall_vi(c,b.arg):c(void 0===b.arg?null:b.arg)}}}function la(e){ha++;a.monitorRunDependencies&&a.monitorRunDependencies(ha)}function Na(e){ha--; a%c&&(a+=c-a%c);return a}function r(){a.HEAP8=ia=new Int8Array(D);a.HEAP16=Ja=new Int16Array(D);a.HEAP32=E=new Int32Array(D);a.HEAPU8=W=new Uint8Array(D);a.HEAPU16=new Uint16Array(D);a.HEAPU32=new Uint32Array(D);a.HEAPF32=new Float32Array(D);a.HEAPF64=new Float64Array(D)}function B(e){for(;0<e.length;){var c=e.shift();if("function"==typeof c)c();else{var b=c.func;"number"===typeof b?void 0===c.arg?a.dynCall_v(b):a.dynCall_vi(b,c.arg):b(void 0===c.arg?null:c.arg)}}}function Y(a){return String.prototype.startsWith?
a.monitorRunDependencies&&a.monitorRunDependencies(ha);0==ha&&(null!==Ba&&(clearInterval(Ba),Ba=null),sa&&(e=sa,sa=null,e()))}function na(){return!!na.uncaught_exception}function qa(){var e=A.last;if(!e)return(m.setTempRet0(0),0)|0;var b=A.infos[e],c=b.type;if(!c)return(m.setTempRet0(0),e)|0;var l=Array.prototype.slice.call(arguments);a.___cxa_is_pointer_type(c);qa.buffer||(qa.buffer=Ta(4));x[qa.buffer>>2]=e;e=qa.buffer;for(var d=0;d<l.length;d++)if(l[d]&&a.___cxa_can_catch(l[d],c,e))return e=x[e>> a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}function v(){return!!v.uncaught_exception}function la(){var e=y.last;if(!e)return(sa(0),0)|0;var c=y.infos[e],b=c.type;if(!b)return(sa(0),e)|0;var p=Array.prototype.slice.call(arguments);a.___cxa_is_pointer_type(b);la.buffer||(la.buffer=Ka(4));E[la.buffer>>2]=e;e=la.buffer;for(var d=0;d<p.length;d++)if(p[d]&&a.___cxa_can_catch(p[d],b,e))return e=E[e>>2],c.adjusted=e,(sa(p[d]),e)|0;e=E[e>>2];
2],b.adjusted=e,(m.setTempRet0(l[d]),e)|0;e=x[e>>2];return(m.setTempRet0(c),e)|0}function Q(e,b){w.varargs=b;try{var c=w.get(),l=w.get(),d=w.get();e=0;Q.buffer||(Q.buffers=[null,[],[]],Q.printChar=function(b,c){var e=Q.buffers[b];f(e);if(0===c||10===c){b=1===b?a.print:a.printErr;a:{for(var l=c=0;e[l];)++l;if(16<l-c&&e.subarray&&Ua)c=Ua.decode(e.subarray(c,l));else for(l="";;){var d=e[c++];if(!d){c=l;break a}if(d&128){var g=e[c++]&63;if(192==(d&224))l+=String.fromCharCode((d&31)<<6|g);else{var h=e[c++]& return(sa(b),e)|0}function Z(e,c){w.varargs=c;try{var b=w.get(),p=w.get(),d=w.get();e=0;Z.buffers||(Z.buffers=[null,[],[]],Z.printChar=function(c,b){var e=Z.buffers[c];f(e);0===b||10===b?((1===c?a.print:a.printErr)(h(e,0)),e.length=0):e.push(b)});for(c=0;c<d;c++){for(var g=E[p+8*c>>2],k=E[p+(8*c+4)>>2],l=0;l<k;l++)Z.printChar(b,W[g+l]);e+=k}return e}catch(ya){return"undefined"!==typeof FS&&ya instanceof FS.ErrnoError||O(ya),-ya.errno}}function ma(e,c){ma.seen||(ma.seen={});e in ma.seen||(a.dynCall_v(c),
63;if(224==(d&240))d=(d&15)<<12|g<<6|h;else{var E=e[c++]&63;if(240==(d&248))d=(d&7)<<18|g<<12|h<<6|E;else{var k=e[c++]&63;if(248==(d&252))d=(d&3)<<24|g<<18|h<<12|E<<6|k;else{var ta=e[c++]&63;d=(d&1)<<30|g<<24|h<<18|E<<12|k<<6|ta}}}65536>d?l+=String.fromCharCode(d):(d-=65536,l+=String.fromCharCode(55296|d>>10,56320|d&1023))}}else l+=String.fromCharCode(d)}}b(c);e.length=0}else e.push(c)});for(b=0;b<d;b++){for(var h=x[l+8*b>>2],g=x[l+(8*b+4)>>2],k=0;k<g;k++)Q.printChar(c,T[h+k]);e+=g}return e}catch(Ca){return"undefined"!== ma.seen[e]=1)}function na(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}function wa(e){function c(){if(!a.calledRun&&(a.calledRun=!0,!oa)){La||(La=!0,B(Ma));B(Na);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Oa.unshift(a.postRun.shift());B(Oa)}}if(!(0<ea)){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)Pa.unshift(a.preRun.shift());
typeof FS&&Ca instanceof FS.ErrnoError||W(Ca),-Ca.errno}}function ra(e,b){ra.seen||(ra.seen={});e in ra.seen||(a.dynCall_v(b),ra.seen[e]=1)}function ea(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}function Da(e){function b(){if(!a.calledRun&&(a.calledRun=!0,!ua)){Va||(Va=!0,u(Wa));u(Xa);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Ya.unshift(a.postRun.shift()); B(Pa);0<ea||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1);c()},1)):c())}}function O(e){if(a.onAbort)a.onAbort(e);void 0!==e?(a.print(e),a.printErr(e),e=JSON.stringify(e)):e="";oa=!0;throw"abort("+e+"). Build with -s ASSERTIONS=1 for more info.";}function m(){}function t(a){return(a||m).__cache__}function T(a,c){var b=t(c),e=b[a];if(e)return e;e=Object.create((c||m).prototype);e.ptr=a;return b[a]=e}function U(a){if("string"===typeof a){for(var c=
u(Ya)}}null===Za&&(Za=Date.now());if(!(0<ha)){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)$a.unshift(a.preRun.shift());u($a);0<ha||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1);b()},1)):b())}}function W(e){if(a.onAbort)a.onAbort(e);void 0!==e?(a.print(e),a.printErr(e),e=JSON.stringify(e)):e="";ua=!0;var b="abort("+e+") at "+g()+"\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information."; 0,b=0;b<a.length;++b){var e=a.charCodeAt(b);55296<=e&&57343>=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++b)&1023);127>=e?++c:c=2047>=e?c+2:65535>=e?c+3:2097151>=e?c+4:67108863>=e?c+5:c+6}c=Array(c+1);b=0;e=c.length;if(0<e){e=b+e-1;for(var d=0;d<a.length;++d){var f=a.charCodeAt(d);55296<=f&&57343>=f&&(f=65536+((f&1023)<<10)|a.charCodeAt(++d)&1023);if(127>=f){if(b>=e)break;c[b++]=f}else{if(2047>=f){if(b+1>=e)break;c[b++]=192|f>>6}else{if(65535>=f){if(b+2>=e)break;c[b++]=224|f>>12}else{if(2097151>=f){if(b+
ab&&ab.forEach(function(a){b=a(b,e)});throw b;}function p(){}function t(a){return(a||p).__cache__}function X(a,b){var c=t(b),e=c[a];if(e)return e;e=Object.create((b||p).prototype);e.ptr=a;return c[a]=e}function Y(a){if("string"===typeof a){for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);55296<=e&&57343>=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++c)&1023);127>=e?++b:b=2047>=e?b+2:65535>=e?b+3:2097151>=e?b+4:67108863>=e?b+5:b+6}b=Array(b+1);c=0;e=b.length;if(0<e){e=c+e-1;for(var d=0;d<a.length;++d){var f= 3>=e)break;c[b++]=240|f>>18}else{if(67108863>=f){if(b+4>=e)break;c[b++]=248|f>>24}else{if(b+5>=e)break;c[b++]=252|f>>30;c[b++]=128|f>>24&63}c[b++]=128|f>>18&63}c[b++]=128|f>>12&63}c[b++]=128|f>>6&63}c[b++]=128|f&63}}c[b]=0}a=l.alloc(c,ia);l.copy(c,ia,a)}return a}function z(){throw"cannot construct a Status, no constructor in IDL";}function F(){this.ptr=Wa();t(F)[this.ptr]=this}function G(){this.ptr=Xa();t(G)[this.ptr]=this}function H(){this.ptr=Ya();t(H)[this.ptr]=this}function I(){this.ptr=Za();
a.charCodeAt(d);55296<=f&&57343>=f&&(f=65536+((f&1023)<<10)|a.charCodeAt(++d)&1023);if(127>=f){if(c>=e)break;b[c++]=f}else{if(2047>=f){if(c+1>=e)break;b[c++]=192|f>>6}else{if(65535>=f){if(c+2>=e)break;b[c++]=224|f>>12}else{if(2097151>=f){if(c+3>=e)break;b[c++]=240|f>>18}else{if(67108863>=f){if(c+4>=e)break;b[c++]=248|f>>24}else{if(c+5>=e)break;b[c++]=252|f>>30;b[c++]=128|f>>24&63}b[c++]=128|f>>18&63}b[c++]=128|f>>12&63}b[c++]=128|f>>6&63}b[c++]=128|f&63}}b[c]=0}a=k.alloc(b,fa);k.copy(b,fa,a)}return a} t(I)[this.ptr]=this}function J(){this.ptr=$a();t(J)[this.ptr]=this}function n(){this.ptr=ab();t(n)[this.ptr]=this}function P(){this.ptr=bb();t(P)[this.ptr]=this}function x(){this.ptr=cb();t(x)[this.ptr]=this}function K(){this.ptr=db();t(K)[this.ptr]=this}function q(){this.ptr=eb();t(q)[this.ptr]=this}function L(){this.ptr=fb();t(L)[this.ptr]=this}function M(){this.ptr=gb();t(M)[this.ptr]=this}function V(){this.ptr=hb();t(V)[this.ptr]=this}function Q(){this.ptr=ib();t(Q)[this.ptr]=this}function g(){this.ptr=
function B(){throw"cannot construct a Status, no constructor in IDL";}function G(){this.ptr=lb();t(G)[this.ptr]=this}function H(){this.ptr=mb();t(H)[this.ptr]=this}function I(){this.ptr=nb();t(I)[this.ptr]=this}function J(){this.ptr=ob();t(J)[this.ptr]=this}function K(){this.ptr=pb();t(K)[this.ptr]=this}function q(){this.ptr=qb();t(q)[this.ptr]=this}function P(){this.ptr=rb();t(P)[this.ptr]=this}function z(){this.ptr=sb();t(z)[this.ptr]=this}function L(){this.ptr=tb();t(L)[this.ptr]=this}function r(){this.ptr= jb();t(g)[this.ptr]=this}function C(){this.ptr=kb();t(C)[this.ptr]=this}function X(){throw"cannot construct a VoidPtr, no constructor in IDL";}function N(){this.ptr=lb();t(N)[this.ptr]=this}function R(){this.ptr=mb();t(R)[this.ptr]=this}d=d||{};var a="undefined"!==typeof d?d:{},Qa=!1,Ra=!1;a.onRuntimeInitialized=function(){Qa=!0;if(Ra&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Ra=!0;if(Qa&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=
ub();t(r)[this.ptr]=this}function M(){this.ptr=vb();t(M)[this.ptr]=this}function N(){this.ptr=wb();t(N)[this.ptr]=this}function Z(){this.ptr=xb();t(Z)[this.ptr]=this}function R(){this.ptr=yb();t(R)[this.ptr]=this}function h(){this.ptr=zb();t(h)[this.ptr]=this}function C(){this.ptr=Ab();t(C)[this.ptr]=this}function ca(){throw"cannot construct a VoidPtr, no constructor in IDL";}function O(){this.ptr=Bb();t(O)[this.ptr]=this}function S(){this.ptr=Cb();t(S)[this.ptr]=this}var a=d=d||{},bb=!1,cb=!1;a.onRuntimeInitialized= function(a){if("string"!==typeof a)return!1;a=a.split(".");return 2>a.length||3<a.length?!1:1==a[0]&&0<=a[1]&&3>=a[1]?!0:0!=a[0]||10<a[1]?!1:!0};var pa={},aa;for(aa in a)a.hasOwnProperty(aa)&&(pa[aa]=a[aa]);a.arguments=[];a.thisProgram="./this.program";a.quit=function(a,c){throw c;};a.preRun=[];a.postRun=[];var ja=!1,fa=!1,qa=!1,za=!1;if(a.ENVIRONMENT)if("WEB"===a.ENVIRONMENT)ja=!0;else if("WORKER"===a.ENVIRONMENT)fa=!0;else if("NODE"===a.ENVIRONMENT)qa=!0;else if("SHELL"===a.ENVIRONMENT)za=!0;else throw Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.");
function(){bb=!0;if(cb&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){cb=!0;if(bb&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(a){if("string"!==typeof a)return!1;a=a.split(".");return 2>a.length||3<a.length?!1:1==a[0]&&0<=a[1]&&3>=a[1]?!0:0!=a[0]||10<a[1]?!1:!0};a||(a=("undefined"!==typeof d?d:null)||{});var va={},da;for(da in a)a.hasOwnProperty(da)&&(va[da]=a[da]);var oa=!1,ka=!1,pa=!1,wa=!1;if(a.ENVIRONMENT)if("WEB"=== else ja="object"===typeof window,fa="function"===typeof importScripts,qa="object"===typeof process&&"function"===typeof require&&!ja&&!fa,za=!ja&&!qa&&!fa;if(qa){var Aa,Ba;a.read=function(a,c){Aa||(Aa=require("fs"));Ba||(Ba=require("path"));a=Ba.normalize(a);a=Aa.readFileSync(a);return c?a:a.toString()};a.readBinary=function(e){e=a.read(e,!0);e.buffer||(e=new Uint8Array(e));f(e.buffer);return e};1<process.argv.length&&(a.thisProgram=process.argv[1].replace(/\\/g,"/"));a.arguments=process.argv.slice(2);
a.ENVIRONMENT)oa=!0;else if("WORKER"===a.ENVIRONMENT)ka=!0;else if("NODE"===a.ENVIRONMENT)pa=!0;else if("SHELL"===a.ENVIRONMENT)wa=!0;else throw Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else oa="object"===typeof window,ka="function"===typeof importScripts,pa="object"===typeof process&&"function"===typeof require&&!oa&&!ka,wa=!oa&&!pa&&!ka;if(pa){a.print||(a.print=console.log);a.printErr||(a.printErr=console.warn);var Ea,Fa;a.read=function(a, process.on("uncaughtException",function(a){if(!(a instanceof na))throw a;});process.on("unhandledRejection",function(a,c){process.exit(1)});a.inspect=function(){return"[Emscripten Module object]"}}else if(za)"undefined"!=typeof read&&(a.read=function(a){return read(a)}),a.readBinary=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");f("object"===typeof a);return a},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&
b){Ea||(Ea=require("fs"));Fa||(Fa=require("path"));a=Fa.normalize(a);a=Ea.readFileSync(a);return b?a:a.toString()};a.readBinary=function(e){e=a.read(e,!0);e.buffer||(e=new Uint8Array(e));f(e.buffer);return e};a.thisProgram||(a.thisProgram=1<process.argv.length?process.argv[1].replace(/\\/g,"/"):"unknown-program");a.arguments=process.argv.slice(2);process.on("uncaughtException",function(a){if(!(a instanceof ea))throw a;});a.inspect=function(){return"[Emscripten Module object]"}}else if(wa)a.print|| (a.arguments=arguments),"function"===typeof quit&&(a.quit=function(a,c){quit(a)});else if(ja||fa)a.read=function(a){var c=new XMLHttpRequest;c.open("GET",a,!1);c.send(null);return c.responseText},fa&&(a.readBinary=function(a){var c=new XMLHttpRequest;c.open("GET",a,!1);c.responseType="arraybuffer";c.send(null);return new Uint8Array(c.response)}),a.readAsync=function(a,c,b){var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=function(){200==e.status||0==e.status&&e.response?
(a.print=print),"undefined"!=typeof printErr&&(a.printErr=printErr),a.read="undefined"!=typeof read?function(a){return read(a)}:function(){throw"no read() available";},a.readBinary=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");f("object"===typeof a);return a},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(a,b){quit(a)});else if(oa||ka)a.read= c(e.response):b()};e.onerror=b;e.send(null)},a.setWindowTitle=function(a){document.title=a};a.print="undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null;a.printErr="undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||a.print;a.print=a.print;a.printErr=a.printErr;for(aa in pa)pa.hasOwnProperty(aa)&&(a[aa]=pa[aa]);pa=void 0;var oa=0,Ia="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;"undefined"!==typeof TextDecoder&&
function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ka&&(a.readBinary=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),a.readAsync=function(a,b,c){var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=function(){200==e.status||0==e.status&&e.response?b(e.response):c()};e.onerror=c;e.send(null)},"undefined"!=typeof arguments&&(a.arguments=arguments), new TextDecoder("utf-16le");var ia,W,Ja,E,ba,Ca,ta,ua,Da,ka;var Ea=ba=Ca=ta=ua=Da=ka=0;var Sa=!1;a.reallocBuffer||(a.reallocBuffer=function(a){try{if(ArrayBuffer.transfer)var c=ArrayBuffer.transfer(D,a);else{var b=ia;c=new ArrayBuffer(a);(new Int8Array(c)).set(b)}}catch(p){return!1}return nb(c)?c:!1});try{var Ta=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);Ta(new ArrayBuffer(4))}catch(e){Ta=function(a){return a.byteLength}}var Fa=a.TOTAL_STACK||
"undefined"!==typeof console?(a.print||(a.print=function(a){console.log(a)}),a.printErr||(a.printErr=function(a){console.warn(a)})):a.print||(a.print=function(a){}),"undefined"===typeof a.setWindowTitle&&(a.setWindowTitle=function(a){document.title=a});else throw Error("Unknown runtime environment. Where are we?");a.print||(a.print=function(){});a.printErr||(a.printErr=a.print);a.arguments||(a.arguments=[]);a.thisProgram||(a.thisProgram="./this.program");a.quit||(a.quit=function(a,b){throw b;});a.print= 5242880,A=a.TOTAL_MEMORY||16777216;A<Fa&&a.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+A+"! (TOTAL_STACK="+Fa+")");if(a.buffer)var D=a.buffer;else"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(a.wasmMemory=new WebAssembly.Memory({initial:A/65536}),D=a.wasmMemory.buffer):D=new ArrayBuffer(A),a.buffer=D;r();E[0]=1668509029;Ja[1]=25459;if(115!==W[2]||99!==W[3])throw"Runtime error: expected the system to be little-endian!";var Pa=[],Ma=[],Na=[],ob=[],Oa=[],
a.print;a.printErr=a.printErr;a.preRun=[];a.postRun=[];for(da in va)va.hasOwnProperty(da)&&(a[da]=va[da]);va=void 0;var m={setTempRet0:function(a){return tempRet0=a},getTempRet0:function(){return tempRet0},stackSave:function(){return U},stackRestore:function(a){U=a},getNativeTypeSize:function(a){switch(a){case "i1":case "i8":return 1;case "i16":return 2;case "i32":return 4;case "i64":return 8;case "float":return 4;case "double":return 8;default:return"*"===a[a.length-1]?m.QUANTUM_SIZE:"i"===a[0]? La=!1,ea=0,Ga=null,ra=null;a.preloadedImages={};a.preloadedAudios={};(function(){function e(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(a.readBinary)return a.readBinary(f);throw"on the web, we need the wasm binary to be preloaded and set on Module['wasmBinary']. emcc.py will do that for you when generating HTML (but not JS)";}catch(Va){O(Va)}}function c(){return a.wasmBinary||!ja&&!fa||"function"!==typeof fetch?new Promise(function(a,c){a(e())}):fetch(f,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+
(a=parseInt(a.substr(1)),f(0===a%8),a/8):0}},getNativeFieldSize:function(a){return Math.max(m.getNativeTypeSize(a),m.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(a,b){"double"===b||"i64"===b?a&7&&(f(4===(a&7)),a+=4):f(0===(a&3));return a},getAlignSize:function(a,b,c){return c||"i64"!=a&&"double"!=a?a?Math.min(b||(a?m.getNativeFieldSize(a):0),m.QUANTUM_SIZE):Math.min(b,8):8},dynCall:function(e,b,c){return c&&c.length?a["dynCall_"+e].apply(null,[b].concat(c)):a["dynCall_"+e].call(null,b)},functionPointers:[], f+"'";return a.arrayBuffer()}).catch(function(){return e()})}function b(b,e,d){function p(c,b){k=c.exports;k.memory&&(c=k.memory,b=a.buffer,c.byteLength<b.byteLength&&a.printErr("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),b=new Int8Array(b),(new Int8Array(c)).set(b),a.buffer=D=c,r());a.asm=k;a.usingWasm=!0;ea--;a.monitorRunDependencies&&a.monitorRunDependencies(ea);0==ea&&(null!==Ga&&(clearInterval(Ga),Ga=null),ra&&(c=ra,ra=null,c()))}
addFunction:function(a){for(var b=0;b<m.functionPointers.length;b++)if(!m.functionPointers[b])return m.functionPointers[b]=a,2*(1+b);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";},removeFunction:function(a){m.functionPointers[(a-2)/2]=null},warnOnce:function(e){m.warnOnce.shown||(m.warnOnce.shown={});m.warnOnce.shown[e]||(m.warnOnce.shown[e]=1,a.printErr(e))},funcWrappers:{},getFuncWrapper:function(a,b){if(a){f(b);m.funcWrappers[b]||(m.funcWrappers[b]= function g(a){p(a.instance,a.module)}function S(b){c().then(function(a){return WebAssembly.instantiate(a,h)}).then(b).catch(function(c){a.printErr("failed to asynchronously prepare wasm: "+c);O(c)})}if("object"!==typeof WebAssembly)return a.printErr("no native wasm support detected"),!1;if(!(a.wasmMemory instanceof WebAssembly.Memory))return a.printErr("no native wasm Memory in use"),!1;e.memory=a.wasmMemory;h.global={NaN:NaN,Infinity:Infinity};h["global.Math"]=Math;h.env=e;ea++;a.monitorRunDependencies&&
{});var c=m.funcWrappers[b];c[a]||(c[a]=1===b.length?function(){return m.dynCall(b,a)}:2===b.length?function(c){return m.dynCall(b,a,[c])}:function(){return m.dynCall(b,a,Array.prototype.slice.call(arguments))});return c[a]}},getCompilerSetting:function(a){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work";},stackAlloc:function(a){var b=U;U=U+a|0;U=U+15&-16;return b},staticAlloc:function(a){var b=aa;aa=aa+a|0;aa=aa+15& a.monitorRunDependencies(ea);if(a.instantiateWasm)try{return a.instantiateWasm(h,p)}catch(pb){return a.printErr("Module.instantiateWasm callback failed with error: "+pb),!1}a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||Y(f)||"function"!==typeof fetch?S(g):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),h).then(g).catch(function(c){a.printErr("wasm streaming compile failed: "+c);a.printErr("falling back to ArrayBuffer instantiation");S(g)});return{}}var d=
-16;return b},dynamicAlloc:function(a){var b=x[ba>>2];a=(b+a+15|0)&-16;x[ba>>2]=a;return a>=y&&!Ma()?(x[ba>>2]=b,0):b},alignMemory:function(a,b){return Math.ceil(a/(b?b:16))*(b?b:16)},makeBigInt:function(a,b,c){return c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(b|0)},GLOBAL_BASE:1024,QUANTUM_SIZE:4,__dummy__:0},ua=0,Ua="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var Aa=65536,Sa=16777216,ib=16777216,fa,T,za, "draco_decoder.wast",f="draco_decoder.wasm",g="draco_decoder.temp.asm.js";"function"===typeof a.locateFile&&(Y(d)||(d=a.locateFile(d)),Y(f)||(f=a.locateFile(f)),Y(g)||(g=a.locateFile(g)));var h={global:null,env:null,asm2wasm:{"f64-rem":function(a,c){return a%c},"debugger":function(){debugger}},parent:a},k=null;a.asmPreload=a.asm;var l=a.reallocBuffer;a.reallocBuffer=function(c){if("asmjs"===m)var b=l(c);else a:{c=ha(c,a.usingWasm?65536:16777216);var e=a.buffer.byteLength;if(a.usingWasm)try{b=-1!==
Oa,x,Pa,Qa,Ra,aa,Ga,U,xa,Ha,ba;var Ia=aa=Ga=U=xa=Ha=ba=0;a.reallocBuffer||(a.reallocBuffer=function(a){try{if(ArrayBuffer.transfer)var b=ArrayBuffer.transfer(F,a);else{var c=fa;b=new ArrayBuffer(a);(new Int8Array(b)).set(c)}}catch(l){return!1}return Db(b)?b:!1});try{var Ja=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);Ja(new ArrayBuffer(4))}catch(e){Ja=function(a){return a.byteLength}}var Ka=a.TOTAL_STACK||5242880,y=a.TOTAL_MEMORY||16777216; a.wasmMemory.grow((c-e)/65536)?a.buffer=a.wasmMemory.buffer:null;break a}catch(ud){b=null;break a}b=void 0}return b};var m="";a.asm=function(c,e,d){if(!e.table){var p=a.wasmTableSize;void 0===p&&(p=1024);var f=a.wasmMaxTableSize;e.table="object"===typeof WebAssembly&&"function"===typeof WebAssembly.Table?void 0!==f?new WebAssembly.Table({initial:p,maximum:f,element:"anyfunc"}):new WebAssembly.Table({initial:p,element:"anyfunc"}):Array(p);a.wasmTable=e.table}e.memoryBase||(e.memoryBase=a.STATIC_BASE);
y<Ka&&a.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+y+"! (TOTAL_STACK="+Ka+")");if(a.buffer)var F=a.buffer;else"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(a.wasmMemory=new WebAssembly.Memory({initial:y/Aa}),F=a.wasmMemory.buffer):F=new ArrayBuffer(y);D();x[0]=1668509029;za[1]=25459;if(115!==T[2]||99!==T[3])throw"Runtime error: expected the system to be little-endian!";a.HEAP=void 0;a.buffer=F;a.HEAP8=fa;a.HEAP16=za;a.HEAP32=x;a.HEAPU8=T;a.HEAPU16=Oa; e.tableBase||(e.tableBase=0);(c=b(c,e,d))||O("no binaryen method succeeded. consider enabling more options, like interpreting, if you want that: https://github.com/kripken/emscripten/wiki/WebAssembly#binaryen-methods");return c}})();Ea=1024;ba=Ea+14800;Ma.push();a.STATIC_BASE=Ea;a.STATIC_BUMP=14800;var qb=ba;ba+=16;var y={last:0,caught:[],infos:{},deAdjust:function(a){if(!a||y.infos[a])return a;for(var c in y.infos)if(y.infos[c].adjusted===a)return c;return a},addRef:function(a){a&&y.infos[a].refcount++},
a.HEAPU32=Pa;a.HEAPF32=Qa;a.HEAPF64=Ra;var $a=[],Wa=[],Xa=[],db=[],Ya=[],Va=!1;f(Math.imul&&Math.fround&&Math.clz32&&Math.trunc,"this is a legacy browser, build with LEGACY_VM_SUPPORT");var ha=0,Ba=null,sa=null;a.preloadedImages={};a.preloadedAudios={};var V=null;(function(){function e(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(a.readBinary)return a.readBinary(d);throw"on the web, we need the wasm binary to be preloaded and set on Module['wasmBinary']. emcc.py will do that for you when generating HTML (but not JS)"; decRef:function(e){if(e){var c=y.infos[e];f(0<c.refcount);c.refcount--;0!==c.refcount||c.rethrown||(c.destructor&&a.dynCall_vi(c.destructor,e),delete y.infos[e],___cxa_free_exception(e))}},clearRef:function(a){a&&(y.infos[a].refcount=0)}},w={varargs:0,get:function(a){w.varargs+=4;return E[w.varargs-4>>2]},getStr:function(){return u(w.get())},get64:function(){var a=w.get(),c=w.get();0<=a?f(0===c):f(-1===c);return a},getZero:function(){f(0===w.get())}},va={},Ha=1;ka=function(a){f(!Sa);var c=ba;ba=ba+
}catch(jb){W(jb)}}function b(){return a.wasmBinary||!oa&&!ka||"function"!==typeof fetch?new Promise(function(a,b){a(e())}):fetch(d,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+d+"'";return a.arrayBuffer()}).catch(function(){return e()})}function c(c,e,l){function f(b,c){h=b.exports;if(h.memory){b=h.memory;c=a.buffer;b.byteLength<c.byteLength&&a.printErr("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"); a+15&-16;return c}(4);Ca=ta=k(ba);ua=Ca+Fa;Da=k(ua);E[ka>>2]=Da;Sa=!0;a.wasmTableSize=476;a.wasmMaxTableSize=476;a.asmGlobalArg={};a.asmLibraryArg={abort:O,assert:f,enlargeMemory:function(){var e=a.usingWasm?65536:16777216,c=2147483648-e;if(E[ka>>2]>c)return!1;var b=A;for(A=Math.max(A,16777216);A<E[ka>>2];)A=536870912>=A?ha(2*A,e):Math.min(ha((3*A+2147483648)/4,e),c);e=a.reallocBuffer(A);if(!e||e.byteLength!=A)return A=b,!1;a.buffer=D=e;r();return!0},getTotalMemory:function(){return A},abortOnCannotGrowMemory:function(){O("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+
c=new Int8Array(c);var e=new Int8Array(b);V||c.set(e.subarray(a.STATIC_BASE,a.STATIC_BASE+a.STATIC_BUMP),a.STATIC_BASE);e.set(c);a.buffer=F=b;D()}a.asm=h;a.usingWasm=!0;Na("wasm-instantiate")}function E(a){f(a.instance,a.module)}function k(c){b().then(function(a){return WebAssembly.instantiate(a,g)}).then(c).catch(function(b){a.printErr("failed to asynchronously prepare wasm: "+b);W(b)})}if("object"!==typeof WebAssembly)return a.printErr("no native wasm support detected"),!1;if(!(a.wasmMemory instanceof A+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_ii:function(e,c){try{return a.dynCall_ii(e,c)}catch(b){if("number"!==typeof b&&"longjmp"!==b)throw b;a.setThrew(1,0)}},invoke_iii:function(e,c,b){try{return a.dynCall_iii(e,c,b)}catch(p){if("number"!==typeof p&&"longjmp"!==p)throw p;a.setThrew(1,0)}},invoke_iiii:function(e,c,b,d){try{return a.dynCall_iiii(e,
WebAssembly.Memory))return a.printErr("no native wasm Memory in use"),!1;e.memory=a.wasmMemory;g.global={NaN:NaN,Infinity:Infinity};g["global.Math"]=c.Math;g.env=e;la("wasm-instantiate");if(a.instantiateWasm)try{return a.instantiateWasm(g,f)}catch(kb){return a.printErr("Module.instantiateWasm callback failed with error: "+kb),!1}a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||0===d.indexOf("data:")||"function"!==typeof fetch?k(E):WebAssembly.instantiateStreaming(fetch(d,{credentials:"same-origin"}), c,b,d)}catch(S){if("number"!==typeof S&&"longjmp"!==S)throw S;a.setThrew(1,0)}},invoke_iiiiiii:function(e,c,b,d,f,g,h){try{return a.dynCall_iiiiiii(e,c,b,d,f,g,h)}catch(da){if("number"!==typeof da&&"longjmp"!==da)throw da;a.setThrew(1,0)}},invoke_v:function(e){try{a.dynCall_v(e)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_vi:function(e,c){try{a.dynCall_vi(e,c)}catch(b){if("number"!==typeof b&&"longjmp"!==b)throw b;a.setThrew(1,0)}},invoke_vii:function(e,c,b){try{a.dynCall_vii(e,
g).then(E).catch(function(b){a.printErr("wasm streaming compile failed: "+b);a.printErr("falling back to ArrayBuffer instantiation");k(E)});return{}}var d="draco_decoder.wasm",f="draco_decoder.temp.asm.js";"function"===typeof a.locateFile&&(a.locateFile("draco_decoder.wast"),d=a.locateFile(d),f=a.locateFile(f));var g={global:null,env:null,asm2wasm:{"f64-rem":function(a,b){return a%b},"debugger":function(){debugger}},parent:a},h=null;a.asmPreload=a.asm;var k=a.reallocBuffer;a.reallocBuffer=function(b){if("asmjs"=== c,b)}catch(p){if("number"!==typeof p&&"longjmp"!==p)throw p;a.setThrew(1,0)}},invoke_viii:function(e,c,b,d){try{a.dynCall_viii(e,c,b,d)}catch(S){if("number"!==typeof S&&"longjmp"!==S)throw S;a.setThrew(1,0)}},invoke_viiii:function(e,c,b,d,f){try{a.dynCall_viiii(e,c,b,d,f)}catch(xa){if("number"!==typeof xa&&"longjmp"!==xa)throw xa;a.setThrew(1,0)}},invoke_viiiii:function(e,c,b,d,f,g){try{a.dynCall_viiiii(e,c,b,d,f,g)}catch(ca){if("number"!==typeof ca&&"longjmp"!==ca)throw ca;a.setThrew(1,0)}},invoke_viiiiii:function(e,
m)var c=k(b);else a:{b=ma(b,a.usingWasm?Aa:Sa);var e=a.buffer.byteLength;if(a.usingWasm)try{c=-1!==a.wasmMemory.grow((b-e)/65536)?a.buffer=a.wasmMemory.buffer:null;break a}catch(Jd){c=null;break a}c=void 0}return c};var m="";a.asm=function(b,e,d){if(!e.table){var l=a.wasmTableSize;void 0===l&&(l=1024);var f=a.wasmMaxTableSize;e.table="object"===typeof WebAssembly&&"function"===typeof WebAssembly.Table?void 0!==f?new WebAssembly.Table({initial:l,maximum:f,element:"anyfunc"}):new WebAssembly.Table({initial:l, c,b,d,f,g,h){try{a.dynCall_viiiiii(e,c,b,d,f,g,h)}catch(da){if("number"!==typeof da&&"longjmp"!==da)throw da;a.setThrew(1,0)}},__ZSt18uncaught_exceptionv:v,___cxa_allocate_exception:function(a){return Ka(a)},___cxa_begin_catch:function(a){var c=y.infos[a];c&&!c.caught&&(c.caught=!0,v.uncaught_exception--);c&&(c.rethrown=!1);y.caught.push(a);y.addRef(y.deAdjust(a));return a},___cxa_find_matching_catch:la,___cxa_pure_virtual:function(){oa=!0;throw"Pure virtual function called!";},___cxa_throw:function(a,
element:"anyfunc"}):Array(l);a.wasmTable=e.table}e.memoryBase||(e.memoryBase=a.STATIC_BASE);e.tableBase||(e.tableBase=0);(b=c(b,e,d))||W("no binaryen method succeeded. consider enabling more options, like interpreting, if you want that: https://github.com/kripken/emscripten/wiki/WebAssembly#binaryen-methods");return b}})();Ia=m.GLOBAL_BASE;aa=Ia+14496;Wa.push();V=null;a.STATIC_BASE=Ia;a.STATIC_BUMP=14496;var Eb=aa;aa+=16;var A={last:0,caught:[],infos:{},deAdjust:function(a){if(!a||A.infos[a])return a; c,b){y.infos[a]={ptr:a,adjusted:a,type:c,destructor:b,refcount:0,caught:!1,rethrown:!1};y.last=a;"uncaught_exception"in v?v.uncaught_exception++:v.uncaught_exception=1;throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___gxx_personality_v0:function(){},___resumeException:function(a){y.last||(y.last=a);throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";
for(var b in A.infos)if(A.infos[b].adjusted===a)return b;return a},addRef:function(a){a&&A.infos[a].refcount++},decRef:function(e){if(e){var b=A.infos[e];f(0<b.refcount);b.refcount--;0!==b.refcount||b.rethrown||(b.destructor&&a.dynCall_vi(b.destructor,e),delete A.infos[e],___cxa_free_exception(e))}},clearRef:function(a){a&&(A.infos[a].refcount=0)}},w={varargs:0,get:function(a){w.varargs+=4;return x[w.varargs-4>>2]},getStr:function(){return n(w.get())},get64:function(){var a=w.get(),b=w.get();0<=a? },___setErrNo:function(d){a.___errno_location&&(E[a.___errno_location()>>2]=d);return d},___syscall140:function(a,c){w.varargs=c;try{var b=w.getStreamFromFD();w.get();var d=w.get(),e=w.get(),f=w.get();FS.llseek(b,d,f);E[e>>2]=b.position;b.getdents&&0===d&&0===f&&(b.getdents=null);return 0}catch(ca){return"undefined"!==typeof FS&&ca instanceof FS.ErrnoError||O(ca),-ca.errno}},___syscall146:Z,___syscall6:function(a,c){w.varargs=c;try{var b=w.getStreamFromFD();FS.close(b);return 0}catch(p){return"undefined"!==
f(0===b):f(-1===b);return a},getZero:function(){f(0===w.get())}},ya={},La=1;db.push(function(){var e=a._fflush;e&&e(0);if(e=Q.printChar){var b=Q.buffers;b[1].length&&e(1,10);b[2].length&&e(2,10)}});ba=m.staticAlloc(4);Ga=U=m.alignMemory(aa);xa=Ga+Ka;Ha=m.alignMemory(xa);x[ba>>2]=Ha;a.wasmTableSize=468;a.wasmMaxTableSize=468;a.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array, typeof FS&&p instanceof FS.ErrnoError||O(p),-p.errno}},_abort:function(){a.abort()},_emscripten_memcpy_big:function(a,c,b){W.set(W.subarray(c,c+b),a);return a},_llvm_trap:function(){O("trap!")},_pthread_getspecific:function(a){return va[a]||0},_pthread_key_create:function(a,c){if(0==a)return 22;E[a>>2]=Ha;va[Ha]=0;Ha++;return 0},_pthread_once:ma,_pthread_setspecific:function(a,c){if(!(a in va))return 22;va[a]=c;return 0},flush_NO_FILESYSTEM:function(){var d=a._fflush;d&&d(0);if(d=Z.printChar){var c=
Float64Array:Float64Array,NaN:NaN,Infinity:Infinity,byteLength:Ja};a.asmLibraryArg={abort:W,assert:f,enlargeMemory:Ma,getTotalMemory:function(){return y},abortOnCannotGrowMemory:function(){W("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+y+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}, Z.buffers;c[1].length&&d(1,10);c[2].length&&d(2,10)}},DYNAMICTOP_PTR:ka,tempDoublePtr:qb,ABORT:oa,STACKTOP:ta,STACK_MAX:ua};var Ua=a.asm(a.asmGlobalArg,a.asmLibraryArg,D);a.asm=Ua;a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)};a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)};var $a=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0.apply(null,
invoke_ii:function(e,b){try{return a.dynCall_ii(e,b)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_iii:function(e,b,c){try{return a.dynCall_iii(e,b,c)}catch(l){if("number"!==typeof l&&"longjmp"!==l)throw l;a.setThrew(1,0)}},invoke_iiii:function(e,b,c,d){try{return a.dynCall_iiii(e,b,c,d)}catch(E){if("number"!==typeof E&&"longjmp"!==E)throw E;a.setThrew(1,0)}},invoke_iiiiiii:function(e,b,c,d,f,g,h){try{return a.dynCall_iiiiiii(e,b,c,d,f,g,h)}catch(ja){if("number"!== arguments)},rb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1.apply(null,arguments)},sb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform___destroy___0.apply(null,arguments)},tb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0.apply(null,
typeof ja&&"longjmp"!==ja)throw ja;a.setThrew(1,0)}},invoke_v:function(e){try{a.dynCall_v(e)}catch(b){if("number"!==typeof b&&"longjmp"!==b)throw b;a.setThrew(1,0)}},invoke_vi:function(e,b){try{a.dynCall_vi(e,b)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_vii:function(e,b,c){try{a.dynCall_vii(e,b,c)}catch(l){if("number"!==typeof l&&"longjmp"!==l)throw l;a.setThrew(1,0)}},invoke_viii:function(e,b,c,d){try{a.dynCall_viii(e,b,c,d)}catch(E){if("number"!==typeof E&& arguments)},cb=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0.apply(null,arguments)},ub=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1.apply(null,arguments)},vb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform___destroy___0.apply(null,
"longjmp"!==E)throw E;a.setThrew(1,0)}},invoke_viiii:function(e,b,c,d,f){try{a.dynCall_viiii(e,b,c,d,f)}catch(ta){if("number"!==typeof ta&&"longjmp"!==ta)throw ta;a.setThrew(1,0)}},invoke_viiiii:function(e,b,c,d,f,g){try{a.dynCall_viiiii(e,b,c,d,f,g)}catch(ia){if("number"!==typeof ia&&"longjmp"!==ia)throw ia;a.setThrew(1,0)}},invoke_viiiiii:function(e,b,c,d,f,g,h){try{a.dynCall_viiiiii(e,b,c,d,f,g,h)}catch(ja){if("number"!==typeof ja&&"longjmp"!==ja)throw ja;a.setThrew(1,0)}},__ZSt18uncaught_exceptionv:na, arguments)},wb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_min_value_1.apply(null,arguments)},xb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0.apply(null,arguments)},yb=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_range_0.apply(null,
___cxa_allocate_exception:function(a){return Ta(a)},___cxa_begin_catch:function(a){var b=A.infos[a];b&&!b.caught&&(b.caught=!0,na.uncaught_exception--);b&&(b.rethrown=!1);A.caught.push(a);A.addRef(A.deAdjust(a));return a},___cxa_find_matching_catch:qa,___cxa_pure_virtual:function(){ua=!0;throw"Pure virtual function called!";},___cxa_throw:function(a,b,c){A.infos[a]={ptr:a,adjusted:a,type:b,destructor:c,refcount:0,caught:!1,rethrown:!1};A.last=a;"uncaught_exception"in na?na.uncaught_exception++:na.uncaught_exception= arguments)},bb=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return a.asm._emscripten_bind_AttributeTransformData_AttributeTransformData_0.apply(null,arguments)},zb=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return a.asm._emscripten_bind_AttributeTransformData___destroy___0.apply(null,arguments)},Ab=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return a.asm._emscripten_bind_AttributeTransformData_transform_type_0.apply(null,
1;throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___gxx_personality_v0:function(){},___resumeException:function(a){A.last||(A.last=a);throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___setErrNo:function(e){a.___errno_location&&(x[a.___errno_location()>>2]=e);return e}, arguments)},ib=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return a.asm._emscripten_bind_DecoderBuffer_DecoderBuffer_0.apply(null,arguments)},Bb=a._emscripten_bind_DecoderBuffer_Init_2=function(){return a.asm._emscripten_bind_DecoderBuffer_Init_2.apply(null,arguments)},Cb=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return a.asm._emscripten_bind_DecoderBuffer___destroy___0.apply(null,arguments)},Db=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToMesh_2.apply(null,
___syscall140:function(a,b){w.varargs=b;try{var c=w.getStreamFromFD();w.get();var e=w.get(),d=w.get(),f=w.get();FS.llseek(c,e,f);x[d>>2]=c.position;c.getdents&&0===e&&0===f&&(c.getdents=null);return 0}catch(ia){return"undefined"!==typeof FS&&ia instanceof FS.ErrnoError||W(ia),-ia.errno}},___syscall146:Q,___syscall6:function(a,b){w.varargs=b;try{var c=w.getStreamFromFD();FS.close(c);return 0}catch(l){return"undefined"!==typeof FS&&l instanceof FS.ErrnoError||W(l),-l.errno}},_abort:function(){a.abort()}, arguments)},Eb=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToPointCloud_2.apply(null,arguments)},jb=a._emscripten_bind_Decoder_Decoder_0=function(){return a.asm._emscripten_bind_Decoder_Decoder_0.apply(null,arguments)},Fb=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeByUniqueId_2.apply(null,arguments)},Gb=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=
_emscripten_memcpy_big:function(a,b,c){T.set(T.subarray(b,b+c),a);return a},_pthread_getspecific:function(a){return ya[a]||0},_pthread_key_create:function(a,b){if(0==a)return 22;x[a>>2]=La;ya[La]=0;La++;return 0},_pthread_once:ra,_pthread_setspecific:function(a,b){if(!(a in ya))return 22;ya[a]=b;return 0},DYNAMICTOP_PTR:ba,tempDoublePtr:Eb,ABORT:ua,STACKTOP:U,STACK_MAX:xa};var eb=a.asm(a.asmGlobalArg,a.asmLibraryArg,F);a.asm=eb;a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null, function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3.apply(null,arguments)},Hb=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloat_3.apply(null,arguments)},Ib=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3.apply(null,arguments)},Jb=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByName_2.apply(null,
arguments)};a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)};var pb=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0.apply(null,arguments)},Fb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1.apply(null,arguments)}, arguments)},Kb=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeId_2.apply(null,arguments)},Lb=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3.apply(null,arguments)},Mb=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3.apply(null,arguments)},Nb=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=
Gb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform___destroy___0.apply(null,arguments)},Hb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0.apply(null,arguments)},sb=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0.apply(null, function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3.apply(null,arguments)},Ob=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3.apply(null,arguments)},Pb=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeMetadata_2.apply(null,arguments)},Qb=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3.apply(null,
arguments)},Ib=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1.apply(null,arguments)},Jb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform___destroy___0.apply(null,arguments)},Kb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_min_value_1.apply(null, arguments)},Rb=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3.apply(null,arguments)},Sb=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3.apply(null,arguments)},Tb=a._emscripten_bind_Decoder_GetAttribute_2=function(){return a.asm._emscripten_bind_Decoder_GetAttribute_2.apply(null,arguments)},Ub=a._emscripten_bind_Decoder_GetEncodedGeometryType_1=
arguments)},Lb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0.apply(null,arguments)},Mb=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_range_0.apply(null,arguments)},rb=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return a.asm._emscripten_bind_AttributeTransformData_AttributeTransformData_0.apply(null, function(){return a.asm._emscripten_bind_Decoder_GetEncodedGeometryType_1.apply(null,arguments)},Vb=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return a.asm._emscripten_bind_Decoder_GetFaceFromMesh_3.apply(null,arguments)},Wb=a._emscripten_bind_Decoder_GetMetadata_1=function(){return a.asm._emscripten_bind_Decoder_GetMetadata_1.apply(null,arguments)},Xb=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return a.asm._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2.apply(null,
arguments)},Nb=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return a.asm._emscripten_bind_AttributeTransformData___destroy___0.apply(null,arguments)},Ob=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return a.asm._emscripten_bind_AttributeTransformData_transform_type_0.apply(null,arguments)},yb=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return a.asm._emscripten_bind_DecoderBuffer_DecoderBuffer_0.apply(null,arguments)},Pb=a._emscripten_bind_DecoderBuffer_Init_2= arguments)},Yb=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return a.asm._emscripten_bind_Decoder_SkipAttributeTransform_1.apply(null,arguments)},Zb=a._emscripten_bind_Decoder___destroy___0=function(){return a.asm._emscripten_bind_Decoder___destroy___0.apply(null,arguments)},gb=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0.apply(null,arguments)},$b=a._emscripten_bind_DracoFloat32Array_GetValue_1=
function(){return a.asm._emscripten_bind_DecoderBuffer_Init_2.apply(null,arguments)},Qb=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return a.asm._emscripten_bind_DecoderBuffer___destroy___0.apply(null,arguments)},Rb=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToMesh_2.apply(null,arguments)},Sb=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToPointCloud_2.apply(null, function(){return a.asm._emscripten_bind_DracoFloat32Array_GetValue_1.apply(null,arguments)},ac=a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoFloat32Array___destroy___0.apply(null,arguments)},bc=a._emscripten_bind_DracoFloat32Array_size_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_size_0.apply(null,arguments)},fb=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return a.asm._emscripten_bind_DracoInt16Array_DracoInt16Array_0.apply(null,
arguments)},zb=a._emscripten_bind_Decoder_Decoder_0=function(){return a.asm._emscripten_bind_Decoder_Decoder_0.apply(null,arguments)},Tb=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeByUniqueId_2.apply(null,arguments)},Ub=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3.apply(null,arguments)},Vb=a._emscripten_bind_Decoder_GetAttributeFloat_3= arguments)},cc=a._emscripten_bind_DracoInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt16Array_GetValue_1.apply(null,arguments)},dc=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt16Array___destroy___0.apply(null,arguments)},ec=a._emscripten_bind_DracoInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoInt16Array_size_0.apply(null,arguments)},lb=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return a.asm._emscripten_bind_DracoInt32Array_DracoInt32Array_0.apply(null,
function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloat_3.apply(null,arguments)},Wb=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3.apply(null,arguments)},Xb=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByName_2.apply(null,arguments)},Yb=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeId_2.apply(null, arguments)},fc=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt32Array_GetValue_1.apply(null,arguments)},gc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt32Array___destroy___0.apply(null,arguments)},hc=a._emscripten_bind_DracoInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoInt32Array_size_0.apply(null,arguments)},db=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return a.asm._emscripten_bind_DracoInt8Array_DracoInt8Array_0.apply(null,
arguments)},Zb=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3.apply(null,arguments)},$b=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3.apply(null,arguments)},ac=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3.apply(null,arguments)}, arguments)},ic=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt8Array_GetValue_1.apply(null,arguments)},jc=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt8Array___destroy___0.apply(null,arguments)},kc=a._emscripten_bind_DracoInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoInt8Array_size_0.apply(null,arguments)},Wa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0.apply(null,
bc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3.apply(null,arguments)},cc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeMetadata_2.apply(null,arguments)},dc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3.apply(null,arguments)},ec=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3= arguments)},lc=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt16Array_GetValue_1.apply(null,arguments)},mc=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt16Array___destroy___0.apply(null,arguments)},nc=a._emscripten_bind_DracoUInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_size_0.apply(null,arguments)},Za=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0.apply(null,
function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3.apply(null,arguments)},fc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3.apply(null,arguments)},gc=a._emscripten_bind_Decoder_GetAttribute_2=function(){return a.asm._emscripten_bind_Decoder_GetAttribute_2.apply(null,arguments)},hc=a._emscripten_bind_Decoder_GetEncodedGeometryType_1=function(){return a.asm._emscripten_bind_Decoder_GetEncodedGeometryType_1.apply(null, arguments)},oc=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt32Array_GetValue_1.apply(null,arguments)},pc=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt32Array___destroy___0.apply(null,arguments)},qc=a._emscripten_bind_DracoUInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_size_0.apply(null,arguments)},Ya=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0.apply(null,
arguments)},ic=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return a.asm._emscripten_bind_Decoder_GetFaceFromMesh_3.apply(null,arguments)},jc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return a.asm._emscripten_bind_Decoder_GetMetadata_1.apply(null,arguments)},kc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return a.asm._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2.apply(null,arguments)},lc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return a.asm._emscripten_bind_Decoder_SkipAttributeTransform_1.apply(null, arguments)},rc=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt8Array_GetValue_1.apply(null,arguments)},sc=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt8Array___destroy___0.apply(null,arguments)},tc=a._emscripten_bind_DracoUInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_size_0.apply(null,arguments)},hb=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return a.asm._emscripten_bind_GeometryAttribute_GeometryAttribute_0.apply(null,
arguments)},mc=a._emscripten_bind_Decoder___destroy___0=function(){return a.asm._emscripten_bind_Decoder___destroy___0.apply(null,arguments)},wb=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0.apply(null,arguments)},nc=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoFloat32Array_GetValue_1.apply(null,arguments)},oc=a._emscripten_bind_DracoFloat32Array___destroy___0= arguments)},uc=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return a.asm._emscripten_bind_GeometryAttribute___destroy___0.apply(null,arguments)},kb=a._emscripten_bind_Mesh_Mesh_0=function(){return a.asm._emscripten_bind_Mesh_Mesh_0.apply(null,arguments)},vc=a._emscripten_bind_Mesh___destroy___0=function(){return a.asm._emscripten_bind_Mesh___destroy___0.apply(null,arguments)},wc=a._emscripten_bind_Mesh_num_attributes_0=function(){return a.asm._emscripten_bind_Mesh_num_attributes_0.apply(null,
function(){return a.asm._emscripten_bind_DracoFloat32Array___destroy___0.apply(null,arguments)},pc=a._emscripten_bind_DracoFloat32Array_size_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_size_0.apply(null,arguments)},vb=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return a.asm._emscripten_bind_DracoInt16Array_DracoInt16Array_0.apply(null,arguments)},qc=a._emscripten_bind_DracoInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt16Array_GetValue_1.apply(null, arguments)},xc=a._emscripten_bind_Mesh_num_faces_0=function(){return a.asm._emscripten_bind_Mesh_num_faces_0.apply(null,arguments)},yc=a._emscripten_bind_Mesh_num_points_0=function(){return a.asm._emscripten_bind_Mesh_num_points_0.apply(null,arguments)},zc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetDoubleEntry_2.apply(null,arguments)},Ac=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetEntryName_2.apply(null,
arguments)},rc=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt16Array___destroy___0.apply(null,arguments)},sc=a._emscripten_bind_DracoInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoInt16Array_size_0.apply(null,arguments)},Bb=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return a.asm._emscripten_bind_DracoInt32Array_DracoInt32Array_0.apply(null,arguments)},tc=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt32Array_GetValue_1.apply(null, arguments)},Bc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetIntEntry_2.apply(null,arguments)},Cc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetStringEntry_2.apply(null,arguments)},Dc=a._emscripten_bind_MetadataQuerier_HasDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasDoubleEntry_2.apply(null,arguments)},Ec=a._emscripten_bind_MetadataQuerier_HasEntry_2=
arguments)},uc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt32Array___destroy___0.apply(null,arguments)},vc=a._emscripten_bind_DracoInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoInt32Array_size_0.apply(null,arguments)},tb=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return a.asm._emscripten_bind_DracoInt8Array_DracoInt8Array_0.apply(null,arguments)},wc=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt8Array_GetValue_1.apply(null, function(){return a.asm._emscripten_bind_MetadataQuerier_HasEntry_2.apply(null,arguments)},Fc=a._emscripten_bind_MetadataQuerier_HasIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasIntEntry_2.apply(null,arguments)},Gc=a._emscripten_bind_MetadataQuerier_HasStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasStringEntry_2.apply(null,arguments)},eb=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return a.asm._emscripten_bind_MetadataQuerier_MetadataQuerier_0.apply(null,
arguments)},xc=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt8Array___destroy___0.apply(null,arguments)},yc=a._emscripten_bind_DracoInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoInt8Array_size_0.apply(null,arguments)},lb=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0.apply(null,arguments)},zc=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt16Array_GetValue_1.apply(null, arguments)},Hc=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return a.asm._emscripten_bind_MetadataQuerier_NumEntries_1.apply(null,arguments)},Ic=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return a.asm._emscripten_bind_MetadataQuerier___destroy___0.apply(null,arguments)},mb=a._emscripten_bind_Metadata_Metadata_0=function(){return a.asm._emscripten_bind_Metadata_Metadata_0.apply(null,arguments)},Jc=a._emscripten_bind_Metadata___destroy___0=function(){return a.asm._emscripten_bind_Metadata___destroy___0.apply(null,
arguments)},Ac=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt16Array___destroy___0.apply(null,arguments)},Bc=a._emscripten_bind_DracoUInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_size_0.apply(null,arguments)},ob=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0.apply(null,arguments)},Cc=a._emscripten_bind_DracoUInt32Array_GetValue_1= arguments)},Kc=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return a.asm._emscripten_bind_PointAttribute_GetAttributeTransformData_0.apply(null,arguments)},ab=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return a.asm._emscripten_bind_PointAttribute_PointAttribute_0.apply(null,arguments)},Lc=a._emscripten_bind_PointAttribute___destroy___0=function(){return a.asm._emscripten_bind_PointAttribute___destroy___0.apply(null,arguments)},Mc=a._emscripten_bind_PointAttribute_attribute_type_0=
function(){return a.asm._emscripten_bind_DracoUInt32Array_GetValue_1.apply(null,arguments)},Dc=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt32Array___destroy___0.apply(null,arguments)},Ec=a._emscripten_bind_DracoUInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_size_0.apply(null,arguments)},nb=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0.apply(null, function(){return a.asm._emscripten_bind_PointAttribute_attribute_type_0.apply(null,arguments)},Nc=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_offset_0.apply(null,arguments)},Oc=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_stride_0.apply(null,arguments)},Pc=a._emscripten_bind_PointAttribute_data_type_0=function(){return a.asm._emscripten_bind_PointAttribute_data_type_0.apply(null,
arguments)},Fc=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt8Array_GetValue_1.apply(null,arguments)},Gc=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt8Array___destroy___0.apply(null,arguments)},Hc=a._emscripten_bind_DracoUInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_size_0.apply(null,arguments)},xb=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return a.asm._emscripten_bind_GeometryAttribute_GeometryAttribute_0.apply(null, arguments)},Qc=a._emscripten_bind_PointAttribute_normalized_0=function(){return a.asm._emscripten_bind_PointAttribute_normalized_0.apply(null,arguments)},Rc=a._emscripten_bind_PointAttribute_num_components_0=function(){return a.asm._emscripten_bind_PointAttribute_num_components_0.apply(null,arguments)},Sc=a._emscripten_bind_PointAttribute_size_0=function(){return a.asm._emscripten_bind_PointAttribute_size_0.apply(null,arguments)},Tc=a._emscripten_bind_PointAttribute_unique_id_0=function(){return a.asm._emscripten_bind_PointAttribute_unique_id_0.apply(null,
arguments)},Ic=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return a.asm._emscripten_bind_GeometryAttribute___destroy___0.apply(null,arguments)},Ab=a._emscripten_bind_Mesh_Mesh_0=function(){return a.asm._emscripten_bind_Mesh_Mesh_0.apply(null,arguments)},Jc=a._emscripten_bind_Mesh___destroy___0=function(){return a.asm._emscripten_bind_Mesh___destroy___0.apply(null,arguments)},Kc=a._emscripten_bind_Mesh_num_attributes_0=function(){return a.asm._emscripten_bind_Mesh_num_attributes_0.apply(null, arguments)},Xa=a._emscripten_bind_PointCloud_PointCloud_0=function(){return a.asm._emscripten_bind_PointCloud_PointCloud_0.apply(null,arguments)},Uc=a._emscripten_bind_PointCloud___destroy___0=function(){return a.asm._emscripten_bind_PointCloud___destroy___0.apply(null,arguments)},Vc=a._emscripten_bind_PointCloud_num_attributes_0=function(){return a.asm._emscripten_bind_PointCloud_num_attributes_0.apply(null,arguments)},Wc=a._emscripten_bind_PointCloud_num_points_0=function(){return a.asm._emscripten_bind_PointCloud_num_points_0.apply(null,
arguments)},Lc=a._emscripten_bind_Mesh_num_faces_0=function(){return a.asm._emscripten_bind_Mesh_num_faces_0.apply(null,arguments)},Mc=a._emscripten_bind_Mesh_num_points_0=function(){return a.asm._emscripten_bind_Mesh_num_points_0.apply(null,arguments)},Nc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetDoubleEntry_2.apply(null,arguments)},Oc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetEntryName_2.apply(null, arguments)},Xc=a._emscripten_bind_Status___destroy___0=function(){return a.asm._emscripten_bind_Status___destroy___0.apply(null,arguments)},Yc=a._emscripten_bind_Status_code_0=function(){return a.asm._emscripten_bind_Status_code_0.apply(null,arguments)},Zc=a._emscripten_bind_Status_error_msg_0=function(){return a.asm._emscripten_bind_Status_error_msg_0.apply(null,arguments)},$c=a._emscripten_bind_Status_ok_0=function(){return a.asm._emscripten_bind_Status_ok_0.apply(null,arguments)},ad=a._emscripten_bind_VoidPtr___destroy___0=
arguments)},Pc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetIntEntry_2.apply(null,arguments)},Qc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetStringEntry_2.apply(null,arguments)},Rc=a._emscripten_bind_MetadataQuerier_HasDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasDoubleEntry_2.apply(null,arguments)},Sc=a._emscripten_bind_MetadataQuerier_HasEntry_2= function(){return a.asm._emscripten_bind_VoidPtr___destroy___0.apply(null,arguments)},bd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM.apply(null,arguments)},cd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM.apply(null,arguments)},dd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=
function(){return a.asm._emscripten_bind_MetadataQuerier_HasEntry_2.apply(null,arguments)},Tc=a._emscripten_bind_MetadataQuerier_HasIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasIntEntry_2.apply(null,arguments)},Uc=a._emscripten_bind_MetadataQuerier_HasStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasStringEntry_2.apply(null,arguments)},ub=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return a.asm._emscripten_bind_MetadataQuerier_MetadataQuerier_0.apply(null, function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM.apply(null,arguments)},ed=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM.apply(null,arguments)},fd=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE.apply(null,
arguments)},Vc=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return a.asm._emscripten_bind_MetadataQuerier_NumEntries_1.apply(null,arguments)},Wc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return a.asm._emscripten_bind_MetadataQuerier___destroy___0.apply(null,arguments)},Cb=a._emscripten_bind_Metadata_Metadata_0=function(){return a.asm._emscripten_bind_Metadata_Metadata_0.apply(null,arguments)},Xc=a._emscripten_bind_Metadata___destroy___0=function(){return a.asm._emscripten_bind_Metadata___destroy___0.apply(null, arguments)},gd=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD.apply(null,arguments)},hd=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH.apply(null,arguments)},id=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_COLOR.apply(null,arguments)},jd=
arguments)},Yc=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return a.asm._emscripten_bind_PointAttribute_GetAttributeTransformData_0.apply(null,arguments)},qb=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return a.asm._emscripten_bind_PointAttribute_PointAttribute_0.apply(null,arguments)},Zc=a._emscripten_bind_PointAttribute___destroy___0=function(){return a.asm._emscripten_bind_PointAttribute___destroy___0.apply(null,arguments)},$c=a._emscripten_bind_PointAttribute_attribute_type_0= a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_GENERIC.apply(null,arguments)},kd=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_INVALID.apply(null,arguments)},ld=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_NORMAL.apply(null,arguments)},md=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=
function(){return a.asm._emscripten_bind_PointAttribute_attribute_type_0.apply(null,arguments)},ad=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_offset_0.apply(null,arguments)},bd=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_stride_0.apply(null,arguments)},cd=a._emscripten_bind_PointAttribute_data_type_0=function(){return a.asm._emscripten_bind_PointAttribute_data_type_0.apply(null, function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_POSITION.apply(null,arguments)},nd=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD.apply(null,arguments)},od=a._emscripten_enum_draco_StatusCode_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_ERROR.apply(null,arguments)},pd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return a.asm._emscripten_enum_draco_StatusCode_INVALID_PARAMETER.apply(null,
arguments)},dd=a._emscripten_bind_PointAttribute_normalized_0=function(){return a.asm._emscripten_bind_PointAttribute_normalized_0.apply(null,arguments)},ed=a._emscripten_bind_PointAttribute_num_components_0=function(){return a.asm._emscripten_bind_PointAttribute_num_components_0.apply(null,arguments)},fd=a._emscripten_bind_PointAttribute_size_0=function(){return a.asm._emscripten_bind_PointAttribute_size_0.apply(null,arguments)},gd=a._emscripten_bind_PointAttribute_unique_id_0=function(){return a.asm._emscripten_bind_PointAttribute_unique_id_0.apply(null, arguments)},qd=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_IO_ERROR.apply(null,arguments)},rd=a._emscripten_enum_draco_StatusCode_OK=function(){return a.asm._emscripten_enum_draco_StatusCode_OK.apply(null,arguments)},sd=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION.apply(null,arguments)},td=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION.apply(null,
arguments)},mb=a._emscripten_bind_PointCloud_PointCloud_0=function(){return a.asm._emscripten_bind_PointCloud_PointCloud_0.apply(null,arguments)},hd=a._emscripten_bind_PointCloud___destroy___0=function(){return a.asm._emscripten_bind_PointCloud___destroy___0.apply(null,arguments)},id=a._emscripten_bind_PointCloud_num_attributes_0=function(){return a.asm._emscripten_bind_PointCloud_num_attributes_0.apply(null,arguments)},jd=a._emscripten_bind_PointCloud_num_points_0=function(){return a.asm._emscripten_bind_PointCloud_num_points_0.apply(null, arguments)},nb=a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)};a._free=function(){return a.asm._free.apply(null,arguments)};a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)};var Ka=a._malloc=function(){return a.asm._malloc.apply(null,arguments)};a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)};a._memmove=function(){return a.asm._memmove.apply(null,arguments)};a._memset=function(){return a.asm._memset.apply(null,
arguments)},kd=a._emscripten_bind_Status___destroy___0=function(){return a.asm._emscripten_bind_Status___destroy___0.apply(null,arguments)},ld=a._emscripten_bind_Status_code_0=function(){return a.asm._emscripten_bind_Status_code_0.apply(null,arguments)},md=a._emscripten_bind_Status_error_msg_0=function(){return a.asm._emscripten_bind_Status_error_msg_0.apply(null,arguments)},nd=a._emscripten_bind_Status_ok_0=function(){return a.asm._emscripten_bind_Status_ok_0.apply(null,arguments)},od=a._emscripten_bind_VoidPtr___destroy___0= arguments)};a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)};a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)};a.getTempRet0=function(){return a.asm.getTempRet0.apply(null,arguments)};a.runPostSets=function(){return a.asm.runPostSets.apply(null,arguments)};var sa=a.setTempRet0=function(){return a.asm.setTempRet0.apply(null,arguments)};a.setThrew=function(){return a.asm.setThrew.apply(null,arguments)};a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,
function(){return a.asm._emscripten_bind_VoidPtr___destroy___0.apply(null,arguments)},pd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM.apply(null,arguments)},qd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM.apply(null,arguments)},rd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM= arguments)};a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)};a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)};a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)};a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)};a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)};a.dynCall_iiiiiii=function(){return a.asm.dynCall_iiiiiii.apply(null,arguments)};a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,
function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM.apply(null,arguments)},sd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM.apply(null,arguments)},td=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE.apply(null, arguments)};a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)};a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)};a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)};a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)};a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)};a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)};a.asm=Ua;a.then=function(d){if(a.calledRun)d(a);
arguments)},ud=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD.apply(null,arguments)},vd=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH.apply(null,arguments)},wd=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_COLOR.apply(null,arguments)},xd= else{var c=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){c&&c();d(a)}}return a};na.prototype=Error();na.prototype.constructor=na;ra=function c(){a.calledRun||wa();a.calledRun||(ra=c)};a.run=wa;a.exit=function(c,b){if(!b||!a.noExitRuntime||0!==c){if(!a.noExitRuntime&&(oa=!0,ta=void 0,B(ob),a.onExit))a.onExit(c);qa&&process.exit(c);a.quit(c,new na(c))}};a.abort=O;if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();a.noExitRuntime=!0;
a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_GENERIC.apply(null,arguments)},yd=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_INVALID.apply(null,arguments)},zd=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_NORMAL.apply(null,arguments)},Ad=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION= wa();m.prototype=Object.create(m.prototype);m.prototype.constructor=m;m.prototype.__class__=m;m.__cache__={};a.WrapperObject=m;a.getCache=t;a.wrapPointer=T;a.castObject=function(a,b){return T(a.ptr,b)};a.NULL=T(0);a.destroy=function(a){if(!a.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";a.__destroy__();delete t(a.__class__)[a.ptr]};a.compare=function(a,b){return a.ptr===b.ptr};a.getPointer=function(a){return a.ptr};a.getClass=function(a){return a.__class__};var l=
function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_POSITION.apply(null,arguments)},Bd=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD.apply(null,arguments)},Cd=a._emscripten_enum_draco_StatusCode_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_ERROR.apply(null,arguments)},Dd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return a.asm._emscripten_enum_draco_StatusCode_INVALID_PARAMETER.apply(null, {buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(l.needed){for(var c=0;c<l.temps.length;c++)a._free(l.temps[c]);l.temps.length=0;a._free(l.buffer);l.buffer=0;l.size+=l.needed;l.needed=0}l.buffer||(l.size+=128,l.buffer=a._malloc(l.size),f(l.buffer));l.pos=0},alloc:function(c,b){f(l.buffer);c=c.length*b.BYTES_PER_ELEMENT;c=c+7&-8;l.pos+c>=l.size?(f(0<c),l.needed+=c,b=a._malloc(c),l.temps.push(b)):(b=l.buffer+l.pos,l.pos+=c);return b},copy:function(a,b,d){switch(b.BYTES_PER_ELEMENT){case 2:d>>=
arguments)},Ed=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_IO_ERROR.apply(null,arguments)},Fd=a._emscripten_enum_draco_StatusCode_OK=function(){return a.asm._emscripten_enum_draco_StatusCode_OK.apply(null,arguments)},Gd=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION.apply(null,arguments)},Hd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION.apply(null, 1;break;case 4:d>>=2;break;case 8:d>>=3}for(var c=0;c<a.length;c++)b[d+c]=a[c]}};z.prototype=Object.create(m.prototype);z.prototype.constructor=z;z.prototype.__class__=z;z.__cache__={};a.Status=z;z.prototype.code=z.prototype.code=function(){return Yc(this.ptr)};z.prototype.ok=z.prototype.ok=function(){return!!$c(this.ptr)};z.prototype.error_msg=z.prototype.error_msg=function(){return u(Zc(this.ptr))};z.prototype.__destroy__=z.prototype.__destroy__=function(){Xc(this.ptr)};F.prototype=Object.create(m.prototype);
arguments)};a._emscripten_get_global_libc=function(){return a.asm._emscripten_get_global_libc.apply(null,arguments)};var Db=a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)};a._free=function(){return a.asm._free.apply(null,arguments)};a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)};var Ta=a._malloc=function(){return a.asm._malloc.apply(null,arguments)};a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)}; F.prototype.constructor=F;F.prototype.__class__=F;F.__cache__={};a.DracoUInt16Array=F;F.prototype.GetValue=F.prototype.GetValue=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return lc(c,a)};F.prototype.size=F.prototype.size=function(){return nc(this.ptr)};F.prototype.__destroy__=F.prototype.__destroy__=function(){mc(this.ptr)};G.prototype=Object.create(m.prototype);G.prototype.constructor=G;G.prototype.__class__=G;G.__cache__={};a.PointCloud=G;G.prototype.num_attributes=G.prototype.num_attributes=
a._memmove=function(){return a.asm._memmove.apply(null,arguments)};a._memset=function(){return a.asm._memset.apply(null,arguments)};a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)};a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)};a.getTempRet0=function(){return a.asm.getTempRet0.apply(null,arguments)};a.runPostSets=function(){return a.asm.runPostSets.apply(null,arguments)};a.setTempRet0=function(){return a.asm.setTempRet0.apply(null,arguments)}; function(){return Vc(this.ptr)};G.prototype.num_points=G.prototype.num_points=function(){return Wc(this.ptr)};G.prototype.__destroy__=G.prototype.__destroy__=function(){Uc(this.ptr)};H.prototype=Object.create(m.prototype);H.prototype.constructor=H;H.prototype.__class__=H;H.__cache__={};a.DracoUInt8Array=H;H.prototype.GetValue=H.prototype.GetValue=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return rc(c,a)};H.prototype.size=H.prototype.size=function(){return tc(this.ptr)};H.prototype.__destroy__=
a.setThrew=function(){return a.asm.setThrew.apply(null,arguments)};a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)};a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)};a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)};a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)};a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)};a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)}; H.prototype.__destroy__=function(){sc(this.ptr)};I.prototype=Object.create(m.prototype);I.prototype.constructor=I;I.prototype.__class__=I;I.__cache__={};a.DracoUInt32Array=I;I.prototype.GetValue=I.prototype.GetValue=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return oc(c,a)};I.prototype.size=I.prototype.size=function(){return qc(this.ptr)};I.prototype.__destroy__=I.prototype.__destroy__=function(){pc(this.ptr)};J.prototype=Object.create(m.prototype);J.prototype.constructor=J;J.prototype.__class__=
a.dynCall_iiiiiii=function(){return a.asm.dynCall_iiiiiii.apply(null,arguments)};a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)};a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)};a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)};a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)};a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)};a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null, J;J.__cache__={};a.AttributeOctahedronTransform=J;J.prototype.InitFromAttribute=J.prototype.InitFromAttribute=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!rb(c,a)};J.prototype.quantization_bits=J.prototype.quantization_bits=function(){return tb(this.ptr)};J.prototype.__destroy__=J.prototype.__destroy__=function(){sb(this.ptr)};n.prototype=Object.create(m.prototype);n.prototype.constructor=n;n.prototype.__class__=n;n.__cache__={};a.PointAttribute=n;n.prototype.size=n.prototype.size=
arguments)};a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)};m.stackAlloc=a.stackAlloc;m.stackSave=a.stackSave;m.stackRestore=a.stackRestore;m.establishStackSpace=a.establishStackSpace;m.setTempRet0=a.setTempRet0;m.getTempRet0=a.getTempRet0;a.asm=eb;if(V)if("function"===typeof a.locateFile?V=a.locateFile(V):a.memoryInitializerPrefixURL&&(V=a.memoryInitializerPrefixURL+V),pa||wa){var Id=a.readBinary(V);T.set(Id,m.GLOBAL_BASE)}else{var gb=function(){a.readAsync(V,fb, function(){return Sc(this.ptr)};n.prototype.GetAttributeTransformData=n.prototype.GetAttributeTransformData=function(){return T(Kc(this.ptr),P)};n.prototype.attribute_type=n.prototype.attribute_type=function(){return Mc(this.ptr)};n.prototype.data_type=n.prototype.data_type=function(){return Pc(this.ptr)};n.prototype.num_components=n.prototype.num_components=function(){return Rc(this.ptr)};n.prototype.normalized=n.prototype.normalized=function(){return!!Qc(this.ptr)};n.prototype.byte_stride=n.prototype.byte_stride=
function(){throw"could not load memory initializer "+V;})};la("memory initializer");var fb=function(d){d.byteLength&&(d=new Uint8Array(d));T.set(d,m.GLOBAL_BASE);a.memoryInitializerRequest&&delete a.memoryInitializerRequest.response;Na("memory initializer")};if(a.memoryInitializerRequest){var hb=function(){var d=a.memoryInitializerRequest,b=d.response;200!==d.status&&0!==d.status?(console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+d.status+", retrying "+ function(){return Oc(this.ptr)};n.prototype.byte_offset=n.prototype.byte_offset=function(){return Nc(this.ptr)};n.prototype.unique_id=n.prototype.unique_id=function(){return Tc(this.ptr)};n.prototype.__destroy__=n.prototype.__destroy__=function(){Lc(this.ptr)};P.prototype=Object.create(m.prototype);P.prototype.constructor=P;P.prototype.__class__=P;P.__cache__={};a.AttributeTransformData=P;P.prototype.transform_type=P.prototype.transform_type=function(){return Ab(this.ptr)};P.prototype.__destroy__=
V),gb()):fb(b)};a.memoryInitializerRequest.response?setTimeout(hb,0):a.memoryInitializerRequest.addEventListener("load",hb)}else gb()}a.then=function(d){if(a.calledRun)d(a);else{var b=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){b&&b();d(a)}}return a};ea.prototype=Error();ea.prototype.constructor=ea;var Za=null;sa=function b(){a.calledRun||Da();a.calledRun||(sa=b)};a.run=Da;a.exit=function(b,c){if(!c||!a.noExitRuntime){if(!a.noExitRuntime&&(ua=!0,U=void 0,u(db),a.onExit))a.onExit(b);pa&& P.prototype.__destroy__=function(){zb(this.ptr)};x.prototype=Object.create(m.prototype);x.prototype.constructor=x;x.prototype.__class__=x;x.__cache__={};a.AttributeQuantizationTransform=x;x.prototype.InitFromAttribute=x.prototype.InitFromAttribute=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!ub(c,a)};x.prototype.quantization_bits=x.prototype.quantization_bits=function(){return xb(this.ptr)};x.prototype.min_value=x.prototype.min_value=function(a){var c=this.ptr;a&&"object"===
process.exit(b);a.quit(b,new ea(b))}};var ab=[];a.abort=W;if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();Da();p.prototype=Object.create(p.prototype);p.prototype.constructor=p;p.prototype.__class__=p;p.__cache__={};a.WrapperObject=p;a.getCache=t;a.wrapPointer=X;a.castObject=function(a,c){return X(a.ptr,c)};a.NULL=X(0);a.destroy=function(a){if(!a.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";a.__destroy__(); typeof a&&(a=a.ptr);return wb(c,a)};x.prototype.range=x.prototype.range=function(){return yb(this.ptr)};x.prototype.__destroy__=x.prototype.__destroy__=function(){vb(this.ptr)};K.prototype=Object.create(m.prototype);K.prototype.constructor=K;K.prototype.__class__=K;K.__cache__={};a.DracoInt8Array=K;K.prototype.GetValue=K.prototype.GetValue=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return ic(c,a)};K.prototype.size=K.prototype.size=function(){return kc(this.ptr)};K.prototype.__destroy__=
delete t(a.__class__)[a.ptr]};a.compare=function(a,c){return a.ptr===c.ptr};a.getPointer=function(a){return a.ptr};a.getClass=function(a){return a.__class__};var k={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(k.needed){for(var b=0;b<k.temps.length;b++)a._free(k.temps[b]);k.temps.length=0;a._free(k.buffer);k.buffer=0;k.size+=k.needed;k.needed=0}k.buffer||(k.size+=128,k.buffer=a._malloc(k.size),f(k.buffer));k.pos=0},alloc:function(b,c){f(k.buffer);b=b.length*c.BYTES_PER_ELEMENT;b= K.prototype.__destroy__=function(){jc(this.ptr)};q.prototype=Object.create(m.prototype);q.prototype.constructor=q;q.prototype.__class__=q;q.__cache__={};a.MetadataQuerier=q;q.prototype.HasEntry=q.prototype.HasEntry=function(a,b){var c=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);return!!Ec(c,a,b)};q.prototype.HasIntEntry=q.prototype.HasIntEntry=function(a,b){var c=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);
b+7&-8;k.pos+b>=k.size?(f(0<b),k.needed+=b,c=a._malloc(b),k.temps.push(c)):(c=k.buffer+k.pos,k.pos+=b);return c},copy:function(a,c,d){switch(c.BYTES_PER_ELEMENT){case 2:d>>=1;break;case 4:d>>=2;break;case 8:d>>=3}for(var b=0;b<a.length;b++)c[d+b]=a[b]}};B.prototype=Object.create(p.prototype);B.prototype.constructor=B;B.prototype.__class__=B;B.__cache__={};a.Status=B;B.prototype.code=B.prototype.code=function(){return ld(this.ptr)};B.prototype.ok=B.prototype.ok=function(){return!!nd(this.ptr)};B.prototype.error_msg= return!!Fc(c,a,b)};q.prototype.GetIntEntry=q.prototype.GetIntEntry=function(a,b){var c=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);return Bc(c,a,b)};q.prototype.HasDoubleEntry=q.prototype.HasDoubleEntry=function(a,b){var c=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);return!!Dc(c,a,b)};q.prototype.GetDoubleEntry=q.prototype.GetDoubleEntry=function(a,b){var c=this.ptr;l.prepare();a&&"object"===typeof a&&(a=
B.prototype.error_msg=function(){return n(md(this.ptr))};B.prototype.__destroy__=B.prototype.__destroy__=function(){kd(this.ptr)};G.prototype=Object.create(p.prototype);G.prototype.constructor=G;G.prototype.__class__=G;G.__cache__={};a.DracoUInt16Array=G;G.prototype.GetValue=G.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return zc(b,a)};G.prototype.size=G.prototype.size=function(){return Bc(this.ptr)};G.prototype.__destroy__=G.prototype.__destroy__=function(){Ac(this.ptr)}; a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);return zc(c,a,b)};q.prototype.HasStringEntry=q.prototype.HasStringEntry=function(a,b){var c=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);return!!Gc(c,a,b)};q.prototype.GetStringEntry=q.prototype.GetStringEntry=function(a,b){var c=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);return u(Cc(c,a,b))};q.prototype.NumEntries=q.prototype.NumEntries=function(a){var c=this.ptr;
H.prototype=Object.create(p.prototype);H.prototype.constructor=H;H.prototype.__class__=H;H.__cache__={};a.PointCloud=H;H.prototype.num_attributes=H.prototype.num_attributes=function(){return id(this.ptr)};H.prototype.num_points=H.prototype.num_points=function(){return jd(this.ptr)};H.prototype.__destroy__=H.prototype.__destroy__=function(){hd(this.ptr)};I.prototype=Object.create(p.prototype);I.prototype.constructor=I;I.prototype.__class__=I;I.__cache__={};a.DracoUInt8Array=I;I.prototype.GetValue= a&&"object"===typeof a&&(a=a.ptr);return Hc(c,a)};q.prototype.GetEntryName=q.prototype.GetEntryName=function(a,b){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);return u(Ac(c,a,b))};q.prototype.__destroy__=q.prototype.__destroy__=function(){Ic(this.ptr)};L.prototype=Object.create(m.prototype);L.prototype.constructor=L;L.prototype.__class__=L;L.__cache__={};a.DracoInt16Array=L;L.prototype.GetValue=L.prototype.GetValue=function(a){var c=this.ptr;a&&"object"===typeof a&&
I.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Fc(b,a)};I.prototype.size=I.prototype.size=function(){return Hc(this.ptr)};I.prototype.__destroy__=I.prototype.__destroy__=function(){Gc(this.ptr)};J.prototype=Object.create(p.prototype);J.prototype.constructor=J;J.prototype.__class__=J;J.__cache__={};a.DracoUInt32Array=J;J.prototype.GetValue=J.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Cc(b,a)};J.prototype.size=J.prototype.size= (a=a.ptr);return cc(c,a)};L.prototype.size=L.prototype.size=function(){return ec(this.ptr)};L.prototype.__destroy__=L.prototype.__destroy__=function(){dc(this.ptr)};M.prototype=Object.create(m.prototype);M.prototype.constructor=M;M.prototype.__class__=M;M.__cache__={};a.DracoFloat32Array=M;M.prototype.GetValue=M.prototype.GetValue=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return $b(c,a)};M.prototype.size=M.prototype.size=function(){return bc(this.ptr)};M.prototype.__destroy__=M.prototype.__destroy__=
function(){return Ec(this.ptr)};J.prototype.__destroy__=J.prototype.__destroy__=function(){Dc(this.ptr)};K.prototype=Object.create(p.prototype);K.prototype.constructor=K;K.prototype.__class__=K;K.__cache__={};a.AttributeOctahedronTransform=K;K.prototype.InitFromAttribute=K.prototype.InitFromAttribute=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!Fb(b,a)};K.prototype.quantization_bits=K.prototype.quantization_bits=function(){return Hb(this.ptr)};K.prototype.__destroy__=K.prototype.__destroy__= function(){ac(this.ptr)};V.prototype=Object.create(m.prototype);V.prototype.constructor=V;V.prototype.__class__=V;V.__cache__={};a.GeometryAttribute=V;V.prototype.__destroy__=V.prototype.__destroy__=function(){uc(this.ptr)};Q.prototype=Object.create(m.prototype);Q.prototype.constructor=Q;Q.prototype.__class__=Q;Q.__cache__={};a.DecoderBuffer=Q;Q.prototype.Init=Q.prototype.Init=function(a,b){var c=this.ptr;l.prepare();if("object"==typeof a&&"object"===typeof a){var d=l.alloc(a,ia);l.copy(a,ia,d);a=
function(){Gb(this.ptr)};q.prototype=Object.create(p.prototype);q.prototype.constructor=q;q.prototype.__class__=q;q.__cache__={};a.PointAttribute=q;q.prototype.size=q.prototype.size=function(){return fd(this.ptr)};q.prototype.GetAttributeTransformData=q.prototype.GetAttributeTransformData=function(){return X(Yc(this.ptr),P)};q.prototype.attribute_type=q.prototype.attribute_type=function(){return $c(this.ptr)};q.prototype.data_type=q.prototype.data_type=function(){return cd(this.ptr)};q.prototype.num_components= d}b&&"object"===typeof b&&(b=b.ptr);Bb(c,a,b)};Q.prototype.__destroy__=Q.prototype.__destroy__=function(){Cb(this.ptr)};g.prototype=Object.create(m.prototype);g.prototype.constructor=g;g.prototype.__class__=g;g.__cache__={};a.Decoder=g;g.prototype.GetEncodedGeometryType=g.prototype.GetEncodedGeometryType=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Ub(c,a)};g.prototype.DecodeBufferToPointCloud=g.prototype.DecodeBufferToPointCloud=function(a,b){var c=this.ptr;a&&"object"===typeof a&&
q.prototype.num_components=function(){return ed(this.ptr)};q.prototype.normalized=q.prototype.normalized=function(){return!!dd(this.ptr)};q.prototype.byte_stride=q.prototype.byte_stride=function(){return bd(this.ptr)};q.prototype.byte_offset=q.prototype.byte_offset=function(){return ad(this.ptr)};q.prototype.unique_id=q.prototype.unique_id=function(){return gd(this.ptr)};q.prototype.__destroy__=q.prototype.__destroy__=function(){Zc(this.ptr)};P.prototype=Object.create(p.prototype);P.prototype.constructor= (a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);return T(Eb(c,a,b),z)};g.prototype.DecodeBufferToMesh=g.prototype.DecodeBufferToMesh=function(a,b){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);return T(Db(c,a,b),z)};g.prototype.GetAttributeId=g.prototype.GetAttributeId=function(a,b){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);return Kb(c,a,b)};g.prototype.GetAttributeIdByName=g.prototype.GetAttributeIdByName=function(a,b){var c=
P;P.prototype.__class__=P;P.__cache__={};a.AttributeTransformData=P;P.prototype.transform_type=P.prototype.transform_type=function(){return Ob(this.ptr)};P.prototype.__destroy__=P.prototype.__destroy__=function(){Nb(this.ptr)};z.prototype=Object.create(p.prototype);z.prototype.constructor=z;z.prototype.__class__=z;z.__cache__={};a.AttributeQuantizationTransform=z;z.prototype.InitFromAttribute=z.prototype.InitFromAttribute=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!Ib(b,a)}; this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);return Jb(c,a,b)};g.prototype.GetAttributeIdByMetadataEntry=g.prototype.GetAttributeIdByMetadataEntry=function(a,b,d){var c=this.ptr;l.prepare();a&&"object"===typeof a&&(a=a.ptr);b=b&&"object"===typeof b?b.ptr:U(b);d=d&&"object"===typeof d?d.ptr:U(d);return Ib(c,a,b,d)};g.prototype.GetAttribute=g.prototype.GetAttribute=function(a,b){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=
z.prototype.quantization_bits=z.prototype.quantization_bits=function(){return Lb(this.ptr)};z.prototype.min_value=z.prototype.min_value=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Kb(b,a)};z.prototype.range=z.prototype.range=function(){return Mb(this.ptr)};z.prototype.__destroy__=z.prototype.__destroy__=function(){Jb(this.ptr)};L.prototype=Object.create(p.prototype);L.prototype.constructor=L;L.prototype.__class__=L;L.__cache__={};a.DracoInt8Array=L;L.prototype.GetValue=L.prototype.GetValue= b.ptr);return T(Tb(c,a,b),n)};g.prototype.GetAttributeByUniqueId=g.prototype.GetAttributeByUniqueId=function(a,b){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);return T(Fb(c,a,b),n)};g.prototype.GetMetadata=g.prototype.GetMetadata=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return T(Wb(c,a),R)};g.prototype.GetAttributeMetadata=g.prototype.GetAttributeMetadata=function(a,b){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&
function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return wc(b,a)};L.prototype.size=L.prototype.size=function(){return yc(this.ptr)};L.prototype.__destroy__=L.prototype.__destroy__=function(){xc(this.ptr)};r.prototype=Object.create(p.prototype);r.prototype.constructor=r;r.prototype.__class__=r;r.__cache__={};a.MetadataQuerier=r;r.prototype.HasEntry=r.prototype.HasEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Sc(b, (b=b.ptr);return T(Pb(c,a,b),R)};g.prototype.GetFaceFromMesh=g.prototype.GetFaceFromMesh=function(a,b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Vb(c,a,b,d)};g.prototype.GetTriangleStripsFromMesh=g.prototype.GetTriangleStripsFromMesh=function(a,b){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);return Xb(c,a,b)};g.prototype.GetAttributeFloat=g.prototype.GetAttributeFloat=function(a,
a,c)};r.prototype.HasIntEntry=r.prototype.HasIntEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Tc(b,a,c)};r.prototype.GetIntEntry=r.prototype.GetIntEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Pc(b,a,c)};r.prototype.HasDoubleEntry=r.prototype.HasDoubleEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"=== b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Hb(c,a,b,d)};g.prototype.GetAttributeFloatForAllPoints=g.prototype.GetAttributeFloatForAllPoints=function(a,b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Gb(c,a,b,d)};g.prototype.GetAttributeIntForAllPoints=g.prototype.GetAttributeIntForAllPoints=function(a,b,d){var c=this.ptr;a&&"object"===
typeof c?c.ptr:Y(c);return!!Rc(b,a,c)};r.prototype.GetDoubleEntry=r.prototype.GetDoubleEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Nc(b,a,c)};r.prototype.HasStringEntry=r.prototype.HasStringEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Uc(b,a,c)};r.prototype.GetStringEntry=r.prototype.GetStringEntry=function(a,c){var b=this.ptr;k.prepare(); typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Ob(c,a,b,d)};g.prototype.GetAttributeInt8ForAllPoints=g.prototype.GetAttributeInt8ForAllPoints=function(a,b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Nb(c,a,b,d)};g.prototype.GetAttributeUInt8ForAllPoints=g.prototype.GetAttributeUInt8ForAllPoints=function(a,b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===
a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return n(Qc(b,a,c))};r.prototype.NumEntries=r.prototype.NumEntries=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Vc(b,a)};r.prototype.GetEntryName=r.prototype.GetEntryName=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return n(Oc(b,a,c))};r.prototype.__destroy__=r.prototype.__destroy__=function(){Wc(this.ptr)};M.prototype=Object.create(p.prototype);M.prototype.constructor= typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Sb(c,a,b,d)};g.prototype.GetAttributeInt16ForAllPoints=g.prototype.GetAttributeInt16ForAllPoints=function(a,b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Lb(c,a,b,d)};g.prototype.GetAttributeUInt16ForAllPoints=g.prototype.GetAttributeUInt16ForAllPoints=function(a,b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&
M;M.prototype.__class__=M;M.__cache__={};a.DracoInt16Array=M;M.prototype.GetValue=M.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return qc(b,a)};M.prototype.size=M.prototype.size=function(){return sc(this.ptr)};M.prototype.__destroy__=M.prototype.__destroy__=function(){rc(this.ptr)};N.prototype=Object.create(p.prototype);N.prototype.constructor=N;N.prototype.__class__=N;N.__cache__={};a.DracoFloat32Array=N;N.prototype.GetValue=N.prototype.GetValue=function(a){var b= "object"===typeof d&&(d=d.ptr);return!!Qb(c,a,b,d)};g.prototype.GetAttributeInt32ForAllPoints=g.prototype.GetAttributeInt32ForAllPoints=function(a,b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Mb(c,a,b,d)};g.prototype.GetAttributeUInt32ForAllPoints=g.prototype.GetAttributeUInt32ForAllPoints=function(a,b,d){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);b&&"object"===typeof b&&(b=b.ptr);d&&"object"===typeof d&&(d=
this.ptr;a&&"object"===typeof a&&(a=a.ptr);return nc(b,a)};N.prototype.size=N.prototype.size=function(){return pc(this.ptr)};N.prototype.__destroy__=N.prototype.__destroy__=function(){oc(this.ptr)};Z.prototype=Object.create(p.prototype);Z.prototype.constructor=Z;Z.prototype.__class__=Z;Z.__cache__={};a.GeometryAttribute=Z;Z.prototype.__destroy__=Z.prototype.__destroy__=function(){Ic(this.ptr)};R.prototype=Object.create(p.prototype);R.prototype.constructor=R;R.prototype.__class__=R;R.__cache__={}; d.ptr);return!!Rb(c,a,b,d)};g.prototype.SkipAttributeTransform=g.prototype.SkipAttributeTransform=function(a){var c=this.ptr;a&&"object"===typeof a&&(a=a.ptr);Yb(c,a)};g.prototype.__destroy__=g.prototype.__destroy__=function(){Zb(this.ptr)};C.prototype=Object.create(m.prototype);C.prototype.constructor=C;C.prototype.__class__=C;C.__cache__={};a.Mesh=C;C.prototype.num_faces=C.prototype.num_faces=function(){return xc(this.ptr)};C.prototype.num_attributes=C.prototype.num_attributes=function(){return wc(this.ptr)};
a.DecoderBuffer=R;R.prototype.Init=R.prototype.Init=function(a,c){var b=this.ptr;k.prepare();if("object"==typeof a&&"object"===typeof a){var d=k.alloc(a,fa);k.copy(a,fa,d);a=d}c&&"object"===typeof c&&(c=c.ptr);Pb(b,a,c)};R.prototype.__destroy__=R.prototype.__destroy__=function(){Qb(this.ptr)};h.prototype=Object.create(p.prototype);h.prototype.constructor=h;h.prototype.__class__=h;h.__cache__={};a.Decoder=h;h.prototype.GetEncodedGeometryType=h.prototype.GetEncodedGeometryType=function(a){var b=this.ptr; C.prototype.num_points=C.prototype.num_points=function(){return yc(this.ptr)};C.prototype.__destroy__=C.prototype.__destroy__=function(){vc(this.ptr)};X.prototype=Object.create(m.prototype);X.prototype.constructor=X;X.prototype.__class__=X;X.__cache__={};a.VoidPtr=X;X.prototype.__destroy__=X.prototype.__destroy__=function(){ad(this.ptr)};N.prototype=Object.create(m.prototype);N.prototype.constructor=N;N.prototype.__class__=N;N.__cache__={};a.DracoInt32Array=N;N.prototype.GetValue=N.prototype.GetValue=
a&&"object"===typeof a&&(a=a.ptr);return hc(b,a)};h.prototype.DecodeBufferToPointCloud=h.prototype.DecodeBufferToPointCloud=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Sb(b,a,c),B)};h.prototype.DecodeBufferToMesh=h.prototype.DecodeBufferToMesh=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Rb(b,a,c),B)};h.prototype.GetAttributeId=h.prototype.GetAttributeId=function(a,c){var b=this.ptr; function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return fc(b,a)};N.prototype.size=N.prototype.size=function(){return hc(this.ptr)};N.prototype.__destroy__=N.prototype.__destroy__=function(){gc(this.ptr)};R.prototype=Object.create(m.prototype);R.prototype.constructor=R;R.prototype.__class__=R;R.__cache__={};a.Metadata=R;R.prototype.__destroy__=R.prototype.__destroy__=function(){Jc(this.ptr)};(function(){function c(){a.OK=rd();a.ERROR=od();a.IO_ERROR=qd();a.INVALID_PARAMETER=pd();a.UNSUPPORTED_VERSION=
a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return Yb(b,a,c)};h.prototype.GetAttributeIdByName=h.prototype.GetAttributeIdByName=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Xb(b,a,c)};h.prototype.GetAttributeIdByMetadataEntry=h.prototype.GetAttributeIdByMetadataEntry=function(a,c,d){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);d=d&&"object"===typeof d? td();a.UNKNOWN_VERSION=sd();a.INVALID_GEOMETRY_TYPE=fd();a.POINT_CLOUD=gd();a.TRIANGULAR_MESH=hd();a.ATTRIBUTE_INVALID_TRANSFORM=bd();a.ATTRIBUTE_NO_TRANSFORM=cd();a.ATTRIBUTE_QUANTIZATION_TRANSFORM=ed();a.ATTRIBUTE_OCTAHEDRON_TRANSFORM=dd();a.INVALID=kd();a.POSITION=md();a.NORMAL=ld();a.COLOR=id();a.TEX_COORD=nd();a.GENERIC=jd()}a.calledRun?c():Na.unshift(c)})();if("function"===typeof a.onModuleParsed)a.onModuleParsed();return d};
d.ptr:Y(d);return Wb(b,a,c,d)};h.prototype.GetAttribute=h.prototype.GetAttribute=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(gc(b,a,c),q)};h.prototype.GetAttributeByUniqueId=h.prototype.GetAttributeByUniqueId=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Tb(b,a,c),q)};h.prototype.GetMetadata=h.prototype.GetMetadata=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return X(jc(b, "object"===typeof exports&&"object"===typeof module?module.exports=DracoDecoderModule:"function"===typeof define&&define.amd?define([],function(){return DracoDecoderModule}):"object"===typeof exports&&(exports.DracoDecoderModule=DracoDecoderModule);
a),S)};h.prototype.GetAttributeMetadata=h.prototype.GetAttributeMetadata=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(cc(b,a,c),S)};h.prototype.GetFaceFromMesh=h.prototype.GetFaceFromMesh=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ic(b,a,c,d)};h.prototype.GetTriangleStripsFromMesh=h.prototype.GetTriangleStripsFromMesh=function(a,c){var b=this.ptr;
a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return kc(b,a,c)};h.prototype.GetAttributeFloat=h.prototype.GetAttributeFloat=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Vb(b,a,c,d)};h.prototype.GetAttributeFloatForAllPoints=h.prototype.GetAttributeFloatForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&
(d=d.ptr);return!!Ub(b,a,c,d)};h.prototype.GetAttributeIntForAllPoints=h.prototype.GetAttributeIntForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!bc(b,a,c,d)};h.prototype.GetAttributeInt8ForAllPoints=h.prototype.GetAttributeInt8ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ac(b,a,c,d)};
h.prototype.GetAttributeUInt8ForAllPoints=h.prototype.GetAttributeUInt8ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!fc(b,a,c,d)};h.prototype.GetAttributeInt16ForAllPoints=h.prototype.GetAttributeInt16ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Zb(b,a,c,d)};h.prototype.GetAttributeUInt16ForAllPoints=
h.prototype.GetAttributeUInt16ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!dc(b,a,c,d)};h.prototype.GetAttributeInt32ForAllPoints=h.prototype.GetAttributeInt32ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!$b(b,a,c,d)};h.prototype.GetAttributeUInt32ForAllPoints=h.prototype.GetAttributeUInt32ForAllPoints=
function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ec(b,a,c,d)};h.prototype.SkipAttributeTransform=h.prototype.SkipAttributeTransform=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);lc(b,a)};h.prototype.__destroy__=h.prototype.__destroy__=function(){mc(this.ptr)};C.prototype=Object.create(p.prototype);C.prototype.constructor=C;C.prototype.__class__=C;C.__cache__={};a.Mesh=C;C.prototype.num_faces=
C.prototype.num_faces=function(){return Lc(this.ptr)};C.prototype.num_attributes=C.prototype.num_attributes=function(){return Kc(this.ptr)};C.prototype.num_points=C.prototype.num_points=function(){return Mc(this.ptr)};C.prototype.__destroy__=C.prototype.__destroy__=function(){Jc(this.ptr)};ca.prototype=Object.create(p.prototype);ca.prototype.constructor=ca;ca.prototype.__class__=ca;ca.__cache__={};a.VoidPtr=ca;ca.prototype.__destroy__=ca.prototype.__destroy__=function(){od(this.ptr)};O.prototype=
Object.create(p.prototype);O.prototype.constructor=O;O.prototype.__class__=O;O.__cache__={};a.DracoInt32Array=O;O.prototype.GetValue=O.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return tc(b,a)};O.prototype.size=O.prototype.size=function(){return vc(this.ptr)};O.prototype.__destroy__=O.prototype.__destroy__=function(){uc(this.ptr)};S.prototype=Object.create(p.prototype);S.prototype.constructor=S;S.prototype.__class__=S;S.__cache__={};a.Metadata=S;S.prototype.__destroy__=
S.prototype.__destroy__=function(){Xc(this.ptr)};(function(){function b(){a.OK=Fd();a.ERROR=Cd();a.IO_ERROR=Ed();a.INVALID_PARAMETER=Dd();a.UNSUPPORTED_VERSION=Hd();a.UNKNOWN_VERSION=Gd();a.INVALID_GEOMETRY_TYPE=td();a.POINT_CLOUD=ud();a.TRIANGULAR_MESH=vd();a.ATTRIBUTE_INVALID_TRANSFORM=pd();a.ATTRIBUTE_NO_TRANSFORM=qd();a.ATTRIBUTE_QUANTIZATION_TRANSFORM=sd();a.ATTRIBUTE_OCTAHEDRON_TRANSFORM=rd();a.INVALID=yd();a.POSITION=Ad();a.NORMAL=zd();a.COLOR=wd();a.TEX_COORD=Bd();a.GENERIC=xd()}a.calledRun?
b():Xa.unshift(b)})();if("function"===typeof a.onModuleParsed)a.onModuleParsed();return d};"object"===typeof module&&module.exports&&(module.exports=DracoDecoderModule);

View File

@ -5,6 +5,9 @@
News News
======= =======
### Version 1.3.4 release
* Fixes for Unity
### Version 1.3.3 release ### Version 1.3.3 release
* Added ExpertEncoder to the JavaScript API * Added ExpertEncoder to the JavaScript API
* Allows developers to set quantization options per attribute id * Allows developers to set quantization options per attribute id

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{ {
"name": "draco3d", "name": "draco3d",
"version": "1.3.3", "version": "1.3.4",
"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.", "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.",
"main": "draco3d.js", "main": "draco3d.js",
"scripts": { "scripts": {

View File

@ -16,6 +16,9 @@ TODO: Add glTF branch url.
News News
======= =======
### Version 1.3.4 release
* Fixes for Unity
### Version 1.3.3 release ### Version 1.3.3 release
* Added ExpertEncoder to the JavaScript API * Added ExpertEncoder to the JavaScript API
* Allows developers to set quantization options per attribute id * Allows developers to set quantization options per attribute id

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{ {
"name": "draco3dgltf", "name": "draco3dgltf",
"version": "1.3.3", "version": "1.3.4",
"description": "This package contains a specific version of Draco 3D geometric compression library that is used for glTF Draco mesh compression extension.", "description": "This package contains a specific version of Draco 3D geometric compression library that is used for glTF Draco mesh compression extension.",
"main": "draco3dgltf.js", "main": "draco3dgltf.js",
"scripts": { "scripts": {

View File

@ -0,0 +1,11 @@
/**
* @fileoverview Main file for draco-animation package.
*/
var createEncoderModule = require('./draco_animation_encoder_nodejs');
var createDecoderModule = require('./draco_animation_decoder_nodejs');
module.exports = {
createEncoderModule,
createDecoderModule
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,150 @@
// 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.
//
'use_strict';
const assert = require('assert');
const draco = require('./draco-animation');
const decoderModule = draco.createDecoderModule({});
const encoderModule = draco.createEncoderModule({});
function generateAnimationData(numKeyframes, numAnimations, numComponents) {
const timestamps = new Float32Array(numKeyframes);
const keyframes = new Array(numAnimations);
for (let i = 0; i < numAnimations; ++i) {
keyframes[i] = new Float32Array(numKeyframes * numComponents[i]);
}
for (let frameId = 0; frameId < numKeyframes; ++frameId) {
timestamps[frameId] = frameId;
for (let keyframeId = 0; keyframeId < numAnimations; ++keyframeId) {
for (let j = 0; j < numComponents[keyframeId]; ++j) {
// Set an arbitrary deterministic value.
keyframes[keyframeId][frameId * numComponents[keyframeId] + j] =
(frameId * numComponents[keyframeId] + j) * (keyframeId + 1);
}
}
}
const animation = {
timestamps : timestamps,
keyframes : keyframes
};
return animation;
}
function encodeAnimation(animation) {
const encoder = new encoderModule.AnimationEncoder();
const animationBuilder = new encoderModule.AnimationBuilder();
const dracoAnimation = new encoderModule.KeyframeAnimation();
// Add timestamps to animation.
const numKeyframes = animation.timestamps.length;
assert(animationBuilder.SetTimestamps(dracoAnimation, numKeyframes,
animation.timestamps));
// Add keyframes.
for (let keyframeId = 0; keyframeId < animation.keyframes.length;
++keyframeId) {
const numComponents =
animation.keyframes[keyframeId].length / animation.timestamps.length;
assert(animationBuilder.AddKeyframes(dracoAnimation, numKeyframes,
numComponents, animation.keyframes[keyframeId]) == keyframeId + 1);
}
const encodedData = new encoderModule.DracoInt8Array();
encoder.SetTimestampsQuantization(16);
encoder.SetKeyframesQuantization(16);
console.log("Quantized timestamps to 16 bits.");
console.log("Quantized keyframes to 16 bits.");
const encodedLen = encoder.EncodeAnimationToDracoBuffer(dracoAnimation,
encodedData);
encoderModule.destroy(dracoAnimation);
encoderModule.destroy(animationBuilder);
encoderModule.destroy(encoder);
assert(encodedLen > 0, "Failed encoding.");
console.log("Encoded size: " + encodedLen);
const outputBuffer = new ArrayBuffer(encodedLen);
const outputData = new Int8Array(outputBuffer);
for (let i = 0; i < encodedLen; ++i) {
const data0 = encodedData.GetValue(i);
outputData[i] = encodedData.GetValue(i);
}
encoderModule.destroy(encodedData);
return outputBuffer;
}
function decodeAnimation(encodedData) {
const buffer = new decoderModule.DecoderBuffer();
buffer.Init(new Int8Array(encodedData), encodedData.byteLength);
const decoder = new decoderModule.AnimationDecoder();
const dracoAnimation = new decoderModule.KeyframeAnimation();
decoder.DecodeBufferToKeyframeAnimation(buffer, dracoAnimation);
assert(dracoAnimation.ptr != 0, "Invalid animation.");
const numKeyframes = dracoAnimation.num_frames();
const timestampAttData = new decoderModule.DracoFloat32Array();
assert(decoder.GetTimestamps(dracoAnimation, timestampAttData));
const timestamps = new Float32Array(numKeyframes);
for (let i = 0; i < numKeyframes; ++i) {
timestamps[i] = timestampAttData.GetValue(i);
}
const numAnimations = dracoAnimation.num_animations();
const keyframes = new Array(numAnimations);
for (let keyframeId = 0; keyframeId < numAnimations; ++keyframeId) {
const animationAttData = new decoderModule.DracoFloat32Array();
// The id of keyframe attribute starts at 1.
assert(decoder.GetKeyframes(dracoAnimation, keyframeId + 1,
animationAttData));
keyframes[keyframeId] = new Float32Array(animationAttData.size());
for (let i = 0; i < animationAttData.size(); ++i) {
keyframes[keyframeId][i] = animationAttData.GetValue(i);
}
}
const animation = {
timestamps : timestamps,
keyframes : keyframes
}
console.log("Decoding successful.");
return animation;
}
function compareAnimation(animation, decodedAnimation) {
console.log("Comparing decoded animation data...");
assert(animation.timestamps.length == decodedAnimation.timestamps.length);
assert(animation.keyframes.length == decodedAnimation.keyframes.length);
console.log("Done.");
}
// Create animation with 50 frames and two animations.
// The first animation has 3 components and the second has 4 components.
const animation = generateAnimationData(100, 2, [3, 4]);
const encodedData = encodeAnimation(animation);
const decodedAnimation = decodeAnimation(encodedData);
compareAnimation(animation, decodedAnimation);

View File

@ -0,0 +1,19 @@
{
"name": "draco-animation",
"version": "1.0.4",
"description": "Draco animation is a library for compressing and decompressing 3D animations of geometric meshes.",
"main": "draco-animation.js",
"scripts": {
"test": "nodejs draco_animation_encoding_test.js"
},
"keywords": [
"compression",
"animation"
],
"author": "Google Draco Team",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "git+https://github.com/google/draco.git"
}
}

View File

@ -0,0 +1,55 @@
// 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<TimestampType> &timestamp) {
// 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<PointAttribute> timestamp_att =
std::unique_ptr<PointAttribute>(new PointAttribute());
timestamp_att->Init(GeometryAttribute::GENERIC, nullptr, 1, DT_FLOAT32, false,
sizeof(float), 0);
timestamp_att->SetIdentityMapping();
timestamp_att->Reset(num_frames);
for (PointIndex i(0); i < num_frames; ++i) {
timestamp_att->SetAttributeValue(timestamp_att->mapped_index(i),
&timestamp[i.value()]);
}
this->SetAttribute(kTimestampId, std::move(timestamp_att));
return true;
}
} // namespace draco

View File

@ -0,0 +1,108 @@
// 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 <vector>
#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<TimestampType> &timestamp);
// 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 <typename T>
int32_t AddKeyframes(DataType data_type, uint32_t num_components,
const std::vector<T> &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<int32_t>(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 <typename T>
int32_t KeyframeAnimation::AddKeyframes(DataType data_type,
uint32_t num_components,
const std::vector<T> &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<PointAttribute> temp_att =
std::unique_ptr<PointAttribute>(new PointAttribute());
temp_att->Init(GeometryAttribute::GENERIC, nullptr, num_components,
data_type, false, DataTypeLength(data_type), 0);
temp_att->Reset(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<PointAttribute> keyframe_att =
std::unique_ptr<PointAttribute>(new PointAttribute());
keyframe_att->Init(GeometryAttribute::GENERIC, nullptr, num_components,
data_type, false, DataTypeLength(data_type), 0);
keyframe_att->SetIdentityMapping();
keyframe_att->Reset(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_

View File

@ -1,4 +1,4 @@
// Copyright 2016 The Draco Authors. // Copyright 2017 The Draco Authors.
// //
// Licensed under the Apache License, Version 2.0 (the "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 not use this file except in compliance with the License.
@ -12,23 +12,18 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
#ifndef DRACO_MESH_EDGEBREAKER_OBSERVER_H_ #include "draco/animation/keyframe_animation_decoder.h"
#define DRACO_MESH_EDGEBREAKER_OBSERVER_H_
namespace draco { namespace draco {
// A default implementation of the observer that can be used inside of the Status KeyframeAnimationDecoder::Decode(const DecoderOptions &options,
// EdgeBreakerTraverser (edgebreaker_traverser.h). The default implementation DecoderBuffer *in_buffer,
// results in no-op for all calls. KeyframeAnimation *animation) {
class EdgeBreakerObserver { const auto status = PointCloudSequentialDecoder::Decode(
public: options, in_buffer, static_cast<PointCloud *>(animation));
inline void OnSymbolC(){}; if (!status.ok())
inline void OnSymbolL(){}; return status;
inline void OnSymbolR(){}; return OkStatus();
inline void OnSymbolS(){}; }
inline void OnSymbolE(){};
};
} // namespace draco } // namespace draco
#endif // DRACO_MESH_EDGEBREAKER_OBSERVER_H_

View File

@ -0,0 +1,34 @@
// 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_

View File

@ -0,0 +1,28 @@
// 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

View File

@ -0,0 +1,39 @@
// 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_

View File

@ -0,0 +1,168 @@
// 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<draco::KeyframeAnimation::TimestampType>(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<float>(i);
return keyframe_animation_.AddKeyframes(draco::DT_FLOAT32, num_components,
animation_data_);
}
template <int num_components_t>
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<float, 1> att_value0;
std::array<float, 1> att_value1;
ASSERT_TRUE((timestamp_att0->GetValue<float, 1>(
draco::AttributeValueIndex(i), &att_value0)));
ASSERT_TRUE((timestamp_att1->GetValue<float, 1>(
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<float, num_components_t> att_value0;
std::array<float, num_components_t> att_value1;
ASSERT_TRUE((keyframe_att0->GetValue<float, num_components_t>(
draco::AttributeValueIndex(i), &att_value0)));
ASSERT_TRUE((keyframe_att1->GetValue<float, num_components_t>(
draco::AttributeValueIndex(i), &att_value1)));
for (int j = 0; j < att_value0.size(); ++j) {
ASSERT_FLOAT_EQ(att_value0[j], att_value1[j]);
}
}
}
}
template <int num_components_t>
void TestKeyframeAnimationEncoding() {
TestKeyframeAnimationEncoding<num_components_t>(false);
}
template <int num_components_t>
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<KeyframeAnimation> 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<num_components_t>(keyframe_animation_,
*decoded_animation, quantized);
}
draco::KeyframeAnimation keyframe_animation_;
std::vector<draco::KeyframeAnimation::TimestampType> timestamps_;
std::vector<float> 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

View File

@ -0,0 +1,102 @@
// 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<draco::KeyframeAnimation::TimestampType>(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<float>(i);
return keyframe_animation_.AddKeyframes(draco::DT_FLOAT32, num_components,
animation_data_);
}
template <int num_components_t>
void CompareAnimationData() {
// Compare time stamp.
const auto timestamp_att = keyframe_animation_.timestamps();
for (int i = 0; i < timestamps_.size(); ++i) {
std::array<float, 1> att_value;
ASSERT_TRUE((timestamp_att->GetValue<float, 1>(
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<float, num_components_t> att_value;
ASSERT_TRUE((keyframe_att->GetValue<float, num_components_t>(
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 <int num_components_t>
void TestKeyframeAnimation(int32_t num_frames) {
ASSERT_TRUE(CreateAndAddTimestamps(num_frames));
ASSERT_EQ(CreateAndAddAnimationData(num_frames, num_components_t), 1);
CompareAnimationData<num_components_t>();
}
draco::KeyframeAnimation keyframe_animation_;
std::vector<draco::KeyframeAnimation::TimestampType> timestamps_;
std::vector<float> 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

View File

@ -76,7 +76,8 @@ bool AttributeQuantizationTransform::ComputeParameters(
attribute.GetValue(AttributeValueIndex(0), min_values_.data()); attribute.GetValue(AttributeValueIndex(0), min_values_.data());
attribute.GetValue(AttributeValueIndex(0), max_values.get()); attribute.GetValue(AttributeValueIndex(0), max_values.get());
for (AttributeValueIndex i(1); i < static_cast<uint32_t>(attribute.size()); ++i) { for (AttributeValueIndex i(1); i < static_cast<uint32_t>(attribute.size());
++i) {
attribute.GetValue(i, att_val.get()); attribute.GetValue(i, att_val.get());
for (int c = 0; c < num_components; ++c) { for (int c = 0; c < num_components; ++c) {
if (min_values_[c] > att_val[c]) if (min_values_[c] > att_val[c])

View File

@ -21,7 +21,7 @@ namespace draco {
AttributesDecoder::AttributesDecoder() AttributesDecoder::AttributesDecoder()
: point_cloud_decoder_(nullptr), point_cloud_(nullptr) {} : point_cloud_decoder_(nullptr), point_cloud_(nullptr) {}
bool AttributesDecoder::Initialize(PointCloudDecoder *decoder, PointCloud *pc) { bool AttributesDecoder::Init(PointCloudDecoder *decoder, PointCloud *pc) {
point_cloud_decoder_ = decoder; point_cloud_decoder_ = decoder;
point_cloud_ = pc; point_cloud_ = pc;
return true; return true;

View File

@ -37,7 +37,7 @@ class AttributesDecoder : public AttributesDecoderInterface {
// Called after all attribute decoders are created. It can be used to perform // Called after all attribute decoders are created. It can be used to perform
// any custom initialization. // any custom initialization.
bool Initialize(PointCloudDecoder *decoder, PointCloud *pc) override; bool Init(PointCloudDecoder *decoder, PointCloud *pc) override;
// Decodes any attribute decoder specific data from the |in_buffer|. // Decodes any attribute decoder specific data from the |in_buffer|.
bool DecodeAttributesDecoderData(DecoderBuffer *in_buffer) override; bool DecodeAttributesDecoderData(DecoderBuffer *in_buffer) override;
@ -65,7 +65,8 @@ class AttributesDecoder : public AttributesDecoderInterface {
protected: protected:
int32_t GetLocalIdForPointAttribute(int32_t point_attribute_id) const { int32_t GetLocalIdForPointAttribute(int32_t point_attribute_id) const {
const int id_map_size = static_cast<int>(point_attribute_to_local_id_map_.size()); const int id_map_size =
static_cast<int>(point_attribute_to_local_id_map_.size());
if (point_attribute_id >= id_map_size) if (point_attribute_id >= id_map_size)
return -1; return -1;
return point_attribute_to_local_id_map_[point_attribute_id]; return point_attribute_to_local_id_map_[point_attribute_id];

View File

@ -35,7 +35,7 @@ class AttributesDecoderInterface {
// Called after all attribute decoders are created. It can be used to perform // Called after all attribute decoders are created. It can be used to perform
// any custom initialization. // any custom initialization.
virtual bool Initialize(PointCloudDecoder *decoder, PointCloud *pc) = 0; virtual bool Init(PointCloudDecoder *decoder, PointCloud *pc) = 0;
// Decodes any attribute decoder specific data from the |in_buffer|. // Decodes any attribute decoder specific data from the |in_buffer|.
virtual bool DecodeAttributesDecoderData(DecoderBuffer *in_buffer) = 0; virtual bool DecodeAttributesDecoderData(DecoderBuffer *in_buffer) = 0;

View File

@ -25,8 +25,7 @@ AttributesEncoder::AttributesEncoder(int att_id) : AttributesEncoder() {
AddAttributeId(att_id); AddAttributeId(att_id);
} }
bool AttributesEncoder::Initialize(PointCloudEncoder *encoder, bool AttributesEncoder::Init(PointCloudEncoder *encoder, const PointCloud *pc) {
const PointCloud *pc) {
point_cloud_encoder_ = encoder; point_cloud_encoder_ = encoder;
point_cloud_ = pc; point_cloud_ = pc;
return true; return true;

View File

@ -37,7 +37,7 @@ class AttributesEncoder {
// any custom initialization, including setting up attribute dependencies. // any custom initialization, including setting up attribute dependencies.
// Note: no data should be encoded in this function, because the decoder may // Note: no data should be encoded in this function, because the decoder may
// process encoders in a different order from the decoder. // process encoders in a different order from the decoder.
virtual bool Initialize(PointCloudEncoder *encoder, const PointCloud *pc); virtual bool Init(PointCloudEncoder *encoder, const PointCloud *pc);
// Encodes data needed by the target attribute decoder. // Encodes data needed by the target attribute decoder.
virtual bool EncodeAttributesEncoderData(EncoderBuffer *out_buffer); virtual bool EncodeAttributesEncoderData(EncoderBuffer *out_buffer);
@ -89,7 +89,8 @@ class AttributesEncoder {
point_attribute_ids_.push_back(id); point_attribute_ids_.push_back(id);
if (id >= static_cast<int32_t>(point_attribute_to_local_id_map_.size())) if (id >= static_cast<int32_t>(point_attribute_to_local_id_map_.size()))
point_attribute_to_local_id_map_.resize(id + 1, -1); point_attribute_to_local_id_map_.resize(id + 1, -1);
point_attribute_to_local_id_map_[id] = static_cast<int32_t>(point_attribute_ids_.size()) - 1; point_attribute_to_local_id_map_[id] =
static_cast<int32_t>(point_attribute_ids_.size()) - 1;
} }
// Sets new attribute point ids (replacing the existing ones). // Sets new attribute point ids (replacing the existing ones).
@ -102,7 +103,9 @@ class AttributesEncoder {
} }
int32_t GetAttributeId(int i) const { return point_attribute_ids_[i]; } int32_t GetAttributeId(int i) const { return point_attribute_ids_[i]; }
uint32_t num_attributes() const { return static_cast<uint32_t>(point_attribute_ids_.size()); } uint32_t num_attributes() const {
return static_cast<uint32_t>(point_attribute_ids_.size());
}
PointCloudEncoder *encoder() const { return point_cloud_encoder_; } PointCloudEncoder *encoder() const { return point_cloud_encoder_; }
protected: protected:
@ -122,7 +125,8 @@ class AttributesEncoder {
} }
int32_t GetLocalIdForPointAttribute(int32_t point_attribute_id) const { int32_t GetLocalIdForPointAttribute(int32_t point_attribute_id) const {
const int id_map_size = static_cast<int>(point_attribute_to_local_id_map_.size()); const int id_map_size =
static_cast<int>(point_attribute_to_local_id_map_.size());
if (point_attribute_id >= id_map_size) if (point_attribute_id >= id_map_size)
return -1; return -1;
return point_attribute_to_local_id_map_[point_attribute_id]; return point_attribute_to_local_id_map_[point_attribute_id];

View File

@ -267,7 +267,8 @@ bool KdTreeAttributesDecoder::DecodeDataNeededByPortableTransforms(
AttributeQuantizationTransform transform; AttributeQuantizationTransform transform;
transform.SetParameters(quantization_bits, min_value.data(), transform.SetParameters(quantization_bits, min_value.data(),
num_components, max_value_dif); num_components, max_value_dif);
const int num_transforms = static_cast<int>(attribute_quantization_transforms_.size()); const int num_transforms =
static_cast<int>(attribute_quantization_transforms_.size());
if (!transform.TransferToAttribute( if (!transform.TransferToAttribute(
quantized_portable_attributes_[num_transforms].get())) quantized_portable_attributes_[num_transforms].get()))
return false; return false;
@ -289,7 +290,8 @@ bool KdTreeAttributesDecoder::DecodeDataNeededByPortableTransforms(
const uint32_t attribute_count = GetNumAttributes(); const uint32_t attribute_count = GetNumAttributes();
uint32_t total_dimensionality = 0; // position is a required dimension uint32_t total_dimensionality = 0; // position is a required dimension
std::vector<AttributeTuple> atts(attribute_count); std::vector<AttributeTuple> atts(attribute_count);
for (auto attribute_index = 0; static_cast<uint32_t>(attribute_index) < attribute_count; for (auto attribute_index = 0;
static_cast<uint32_t>(attribute_index) < attribute_count;
attribute_index += 1) // increment the dimensionality as needed... attribute_index += 1) // increment the dimensionality as needed...
{ {
const int att_id = GetAttributeId(attribute_index); const int att_id = GetAttributeId(attribute_index);
@ -336,7 +338,8 @@ bool KdTreeAttributesDecoder::DecodeDataNeededByPortableTransforms(
if (!in_buffer->Decode(&num_points)) if (!in_buffer->Decode(&num_points))
return false; return false;
for (auto attribute_index = 0; static_cast<uint32_t>(attribute_index) < attribute_count; for (auto attribute_index = 0;
static_cast<uint32_t>(attribute_index) < attribute_count;
attribute_index += 1) { attribute_index += 1) {
const int att_id = GetAttributeId(attribute_index); const int att_id = GetAttributeId(attribute_index);
PointAttribute *const attr = PointAttribute *const attr =
@ -410,7 +413,8 @@ bool KdTreeAttributesDecoder::TransformAttributeBackToSignedType(
std::vector<UnsignedType> unsigned_val(att->num_components()); std::vector<UnsignedType> unsigned_val(att->num_components());
std::vector<SignedDataTypeT> signed_val(att->num_components()); std::vector<SignedDataTypeT> signed_val(att->num_components());
for (AttributeValueIndex avi(0); avi < static_cast<uint32_t>(att->size()); ++avi) { for (AttributeValueIndex avi(0); avi < static_cast<uint32_t>(att->size());
++avi) {
att->GetValue(avi, &unsigned_val[0]); att->GetValue(avi, &unsigned_val[0]);
for (int c = 0; c < att->num_components(); ++c) { for (int c = 0; c < att->num_components(); ++c) {
// Up-cast |unsigned_val| to int32_t to ensure we don't overflow it for // Up-cast |unsigned_val| to int32_t to ensure we don't overflow it for

View File

@ -87,7 +87,8 @@ bool KdTreeAttributesEncoder::TransformAttributesToPortableFormat() {
std::vector<int32_t> min_value(att->num_components(), std::vector<int32_t> min_value(att->num_components(),
std::numeric_limits<int32_t>::max()); std::numeric_limits<int32_t>::max());
std::vector<int32_t> act_value(att->num_components()); std::vector<int32_t> act_value(att->num_components());
for (AttributeValueIndex avi(0); avi < static_cast<uint32_t>(att->size()); ++avi) { for (AttributeValueIndex avi(0); avi < static_cast<uint32_t>(att->size());
++avi) {
att->ConvertValue<int32_t>(avi, &act_value[0]); att->ConvertValue<int32_t>(avi, &act_value[0]);
for (int c = 0; c < att->num_components(); ++c) { for (int c = 0; c < att->num_components(); ++c) {
if (min_value[c] > act_value[c]) if (min_value[c] > act_value[c])
@ -221,7 +222,7 @@ bool KdTreeAttributesEncoder::EncodePortableAttributes(
const uint32_t *data = point_vector[0]; const uint32_t *data = point_vector[0];
for (int i = 0; i < num_points * num_components_; ++i) { for (int i = 0; i < num_points * num_components_; ++i) {
if (data[i] > 0) { if (data[i] > 0) {
const int msb = bits::MostSignificantBit(data[i]) + 1; const int msb = MostSignificantBit(data[i]) + 1;
if (msb > num_bits) { if (msb > num_bits) {
num_bits = msb; num_bits = msb;
} }

View File

@ -27,7 +27,7 @@ namespace draco {
struct MeshAttributeIndicesEncodingData { struct MeshAttributeIndicesEncodingData {
MeshAttributeIndicesEncodingData() : num_values(0) {} MeshAttributeIndicesEncodingData() : num_values(0) {}
void Initialize(int num_vertices) { void Init(int num_vertices) {
vertex_to_encoded_attribute_value_index_map.resize(num_vertices); vertex_to_encoded_attribute_value_index_map.resize(num_vertices);
// We expect to store one value for each vertex. // We expect to store one value for each vertex.

View File

@ -175,8 +175,12 @@ class OctahedronToolBox {
if (abs_sum == 0) { if (abs_sum == 0) {
vec[0] = center_value_; // vec[1] == v[2] == 0 vec[0] = center_value_; // vec[1] == v[2] == 0
} else { } else {
vec[0] = (static_cast<int64_t>(vec[0]) * static_cast<int64_t>(center_value_)) / abs_sum; vec[0] =
vec[1] = (static_cast<int64_t>(vec[1]) * static_cast<int64_t>(center_value_)) / abs_sum; (static_cast<int64_t>(vec[0]) * static_cast<int64_t>(center_value_)) /
abs_sum;
vec[1] =
(static_cast<int64_t>(vec[1]) * static_cast<int64_t>(center_value_)) /
abs_sum;
if (vec[2] >= 0) { if (vec[2] >= 0) {
vec[2] = center_value_ - std::abs(vec[0]) - std::abs(vec[1]); vec[2] = center_value_ - std::abs(vec[0]) - std::abs(vec[1]);
} else { } else {

View File

@ -23,7 +23,7 @@
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h" #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_decoder.h"
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" #include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h"
#include "draco/core/bit_coders/rans_bit_decoder.h" #include "draco/compression/bit_coders/rans_bit_decoder.h"
#include "draco/core/varint_decoding.h" #include "draco/core/varint_decoding.h"
namespace draco { namespace draco {
@ -84,7 +84,7 @@ bool MeshPredictionSchemeConstrainedMultiParallelogramDecoder<
ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data,
int /* size */, int num_components, int /* size */, int num_components,
const PointIndex * /* entry_to_point_id_map */) { const PointIndex * /* entry_to_point_id_map */) {
this->transform().Initialize(num_components); this->transform().Init(num_components);
// Predicted values for all simple parallelograms encountered at any given // Predicted values for all simple parallelograms encountered at any given
// vertex. // vertex.
@ -105,7 +105,8 @@ bool MeshPredictionSchemeConstrainedMultiParallelogramDecoder<
// Used to store predicted value for multi-parallelogram prediction. // Used to store predicted value for multi-parallelogram prediction.
std::vector<DataTypeT> multi_pred_vals(num_components); std::vector<DataTypeT> multi_pred_vals(num_components);
const int corner_map_size = static_cast<int>(this->mesh_data().data_to_corner_map()->size()); const int corner_map_size =
static_cast<int>(this->mesh_data().data_to_corner_map()->size());
for (int p = 1; p < corner_map_size; ++p) { for (int p = 1; p < corner_map_size; ++p) {
const CornerIndex start_corner_id = const CornerIndex start_corner_id =
this->mesh_data().data_to_corner_map()->at(p); this->mesh_data().data_to_corner_map()->at(p);

View File

@ -21,8 +21,8 @@
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h" #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_encoder.h"
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" #include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h"
#include "draco/core/bit_coders/rans_bit_encoder.h" #include "draco/compression/bit_coders/rans_bit_encoder.h"
#include "draco/core/shannon_entropy.h" #include "draco/compression/entropy/shannon_entropy.h"
#include "draco/core/varint_encoding.h" #include "draco/core/varint_encoding.h"
namespace draco { namespace draco {
@ -87,10 +87,12 @@ class MeshPredictionSchemeConstrainedMultiParallelogramEncoder
// TODO(ostava): This should be generalized in case we use other binary // TODO(ostava): This should be generalized in case we use other binary
// coding scheme. // coding scheme.
const double entropy = ComputeBinaryShannonEntropy( const double entropy = ComputeBinaryShannonEntropy(
static_cast<uint32_t>(total_parallelogram), static_cast<uint32_t>(total_used_parallelograms)); static_cast<uint32_t>(total_parallelogram),
static_cast<uint32_t>(total_used_parallelograms));
// Round up to the nearest full bit. // Round up to the nearest full bit.
return static_cast<int64_t>(ceil(static_cast<double>(total_parallelogram) * entropy)); return static_cast<int64_t>(
ceil(static_cast<double>(total_parallelogram) * entropy));
} }
// Struct that contains data used for measuring the error of each available // Struct that contains data used for measuring the error of each available
@ -166,7 +168,7 @@ bool MeshPredictionSchemeConstrainedMultiParallelogramEncoder<
ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr,
int size, int num_components, int size, int num_components,
const PointIndex * /* entry_to_point_id_map */) { const PointIndex * /* entry_to_point_id_map */) {
this->transform().Initialize(in_data, size, num_components); this->transform().Init(in_data, size, num_components);
const CornerTable *const table = this->mesh_data().corner_table(); const CornerTable *const table = this->mesh_data().corner_table();
const std::vector<int32_t> *const vertex_to_data_map = const std::vector<int32_t> *const vertex_to_data_map =
this->mesh_data().vertex_to_data_map(); this->mesh_data().vertex_to_data_map();
@ -209,7 +211,9 @@ bool MeshPredictionSchemeConstrainedMultiParallelogramEncoder<
// We start processing the vertices from the end because this prediction uses // We start processing the vertices from the end because this prediction uses
// data from previous entries that could be overwritten when an entry is // data from previous entries that could be overwritten when an entry is
// processed. // processed.
for (int p = static_cast<int>(this->mesh_data().data_to_corner_map()->size()) - 1; p > 0; --p) { for (int p =
static_cast<int>(this->mesh_data().data_to_corner_map()->size()) - 1;
p > 0; --p) {
const CornerIndex start_corner_id = const CornerIndex start_corner_id =
this->mesh_data().data_to_corner_map()->at(p); this->mesh_data().data_to_corner_map()->at(p);
@ -386,8 +390,9 @@ bool MeshPredictionSchemeConstrainedMultiParallelogramEncoder<
// Encode the crease edge flags in the reverse vertex order that is needed // 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 // be the decoder. Note that for the currently supported mode, each vertex
// has exactly |num_used_parallelograms| edges that need to be encoded. // has exactly |num_used_parallelograms| edges that need to be encoded.
for (int j = static_cast<int>(is_crease_edge_[i].size()) - num_used_parallelograms; j >= 0; for (int j = static_cast<int>(is_crease_edge_[i].size()) -
j -= num_used_parallelograms) { num_used_parallelograms;
j >= 0; j -= num_used_parallelograms) {
// Go over all edges of the current vertex. // Go over all edges of the current vertex.
for (int k = 0; k < num_used_parallelograms; ++k) { for (int k = 0; k < num_used_parallelograms; ++k) {
encoder.EncodeBit(is_crease_edge_[i][j + k]); encoder.EncodeBit(is_crease_edge_[i][j + k]);

View File

@ -19,7 +19,7 @@
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_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/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h"
#include "draco/core/bit_coders/rans_bit_decoder.h" #include "draco/compression/bit_coders/rans_bit_decoder.h"
namespace draco { namespace draco {
@ -103,7 +103,8 @@ bool MeshPredictionSchemeGeometricNormalDecoder<
// Expecting in_data in octahedral coordinates, i.e., portable attribute. // Expecting in_data in octahedral coordinates, i.e., portable attribute.
DRACO_DCHECK_EQ(num_components, 2); DRACO_DCHECK_EQ(num_components, 2);
const int corner_map_size = static_cast<int>(this->mesh_data().data_to_corner_map()->size()); const int corner_map_size =
static_cast<int>(this->mesh_data().data_to_corner_map()->size());
VectorD<int32_t, 3> pred_normal_3d; VectorD<int32_t, 3> pred_normal_3d;
int32_t pred_normal_oct[2]; int32_t pred_normal_oct[2];

View File

@ -17,8 +17,8 @@
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_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/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" #include "draco/compression/config/compression_shared.h"
#include "draco/core/bit_coders/rans_bit_encoder.h"
namespace draco { namespace draco {
@ -102,7 +102,8 @@ bool MeshPredictionSchemeGeometricNormalEncoder<DataTypeT, TransformT,
flip_normal_bit_encoder_.StartEncoding(); flip_normal_bit_encoder_.StartEncoding();
const int corner_map_size = static_cast<int>(this->mesh_data().data_to_corner_map()->size()); const int corner_map_size =
static_cast<int>(this->mesh_data().data_to_corner_map()->size());
VectorD<int32_t, 3> pred_normal_3d; VectorD<int32_t, 3> pred_normal_3d;
VectorD<int32_t, 2> pos_pred_normal_oct; VectorD<int32_t, 2> pos_pred_normal_oct;

View File

@ -61,8 +61,9 @@ bool MeshPredictionSchemeMultiParallelogramDecoder<DataTypeT, TransformT,
ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data,
int /* size */, int num_components, int /* size */, int num_components,
const PointIndex * /* entry_to_point_id_map */) { const PointIndex * /* entry_to_point_id_map */) {
this->transform().Initialize(num_components); this->transform().Init(num_components);
// For storage of prediction values (already initialized to zero).
std::unique_ptr<DataTypeT[]> pred_vals(new DataTypeT[num_components]()); std::unique_ptr<DataTypeT[]> pred_vals(new DataTypeT[num_components]());
std::unique_ptr<DataTypeT[]> parallelogram_pred_vals( std::unique_ptr<DataTypeT[]> parallelogram_pred_vals(
new DataTypeT[num_components]()); new DataTypeT[num_components]());
@ -73,7 +74,8 @@ bool MeshPredictionSchemeMultiParallelogramDecoder<DataTypeT, TransformT,
const std::vector<int32_t> *const vertex_to_data_map = const std::vector<int32_t> *const vertex_to_data_map =
this->mesh_data().vertex_to_data_map(); this->mesh_data().vertex_to_data_map();
const int corner_map_size = static_cast<int>(this->mesh_data().data_to_corner_map()->size()); const int corner_map_size =
static_cast<int>(this->mesh_data().data_to_corner_map()->size());
for (int p = 1; p < corner_map_size; ++p) { for (int p = 1; p < corner_map_size; ++p) {
const CornerIndex start_corner_id = const CornerIndex start_corner_id =
this->mesh_data().data_to_corner_map()->at(p); this->mesh_data().data_to_corner_map()->at(p);
@ -93,6 +95,7 @@ bool MeshPredictionSchemeMultiParallelogramDecoder<DataTypeT, TransformT,
++num_parallelograms; ++num_parallelograms;
} }
// Proceed to the next corner attached to the vertex.
corner_id = table->SwingRight(corner_id); corner_id = table->SwingRight(corner_id);
if (corner_id == start_corner_id) { if (corner_id == start_corner_id) {
corner_id = kInvalidCornerIndex; corner_id = kInvalidCornerIndex;

View File

@ -63,18 +63,21 @@ bool MeshPredictionSchemeMultiParallelogramEncoder<DataTypeT, TransformT,
ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr,
int size, int num_components, int size, int num_components,
const PointIndex * /* entry_to_point_id_map */) { const PointIndex * /* entry_to_point_id_map */) {
this->transform().Initialize(in_data, size, num_components); this->transform().Init(in_data, size, num_components);
const CornerTable *const table = this->mesh_data().corner_table(); const CornerTable *const table = this->mesh_data().corner_table();
const std::vector<int32_t> *const vertex_to_data_map = const std::vector<int32_t> *const vertex_to_data_map =
this->mesh_data().vertex_to_data_map(); this->mesh_data().vertex_to_data_map();
// For storage of prediction values (already initialized to zero).
std::unique_ptr<DataTypeT[]> pred_vals(new DataTypeT[num_components]()); std::unique_ptr<DataTypeT[]> pred_vals(new DataTypeT[num_components]());
std::unique_ptr<DataTypeT[]> parallelogram_pred_vals( std::unique_ptr<DataTypeT[]> parallelogram_pred_vals(
new DataTypeT[num_components]()); new DataTypeT[num_components]());
// We start processing from the end because this prediction uses data from // We start processing from the end because this prediction uses data from
// previous entries that could be overwritten when an entry is processed. // previous entries that could be overwritten when an entry is processed.
for (int p = static_cast<int>(this->mesh_data().data_to_corner_map()->size() - 1); p > 0; --p) { for (int p =
static_cast<int>(this->mesh_data().data_to_corner_map()->size() - 1);
p > 0; --p) {
const CornerIndex start_corner_id = const CornerIndex start_corner_id =
this->mesh_data().data_to_corner_map()->at(p); this->mesh_data().data_to_corner_map()->at(p);

View File

@ -58,18 +58,20 @@ bool MeshPredictionSchemeParallelogramDecoder<DataTypeT, TransformT,
ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data, ComputeOriginalValues(const CorrType *in_corr, DataTypeT *out_data,
int /* size */, int num_components, int /* size */, int num_components,
const PointIndex * /* entry_to_point_id_map */) { const PointIndex * /* entry_to_point_id_map */) {
this->transform().Initialize(num_components); this->transform().Init(num_components);
const CornerTable *const table = this->mesh_data().corner_table(); const CornerTable *const table = this->mesh_data().corner_table();
const std::vector<int32_t> *const vertex_to_data_map = const std::vector<int32_t> *const vertex_to_data_map =
this->mesh_data().vertex_to_data_map(); this->mesh_data().vertex_to_data_map();
// For storage of prediction values (already initialized to zero).
std::unique_ptr<DataTypeT[]> pred_vals(new DataTypeT[num_components]()); std::unique_ptr<DataTypeT[]> pred_vals(new DataTypeT[num_components]());
// Restore the first value. // Restore the first value.
this->transform().ComputeOriginalValue(pred_vals.get(), in_corr, out_data); this->transform().ComputeOriginalValue(pred_vals.get(), in_corr, out_data);
const int corner_map_size = static_cast<int>(this->mesh_data().data_to_corner_map()->size()); const int corner_map_size =
static_cast<int>(this->mesh_data().data_to_corner_map()->size());
for (int p = 1; p < corner_map_size; ++p) { for (int p = 1; p < corner_map_size; ++p) {
const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p);
const int dst_offset = p * num_components; const int dst_offset = p * num_components;

View File

@ -69,7 +69,8 @@ bool MeshPredictionSchemeParallelogramEncoder<DataTypeT, TransformT,
ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr,
int size, int num_components, int size, int num_components,
const PointIndex * /* entry_to_point_id_map */) { const PointIndex * /* entry_to_point_id_map */) {
this->transform().Initialize(in_data, size, num_components); this->transform().Init(in_data, size, num_components);
// For storage of prediction values (already initialized to zero).
std::unique_ptr<DataTypeT[]> pred_vals(new DataTypeT[num_components]()); std::unique_ptr<DataTypeT[]> pred_vals(new DataTypeT[num_components]());
// We start processing from the end because this prediction uses data from // We start processing from the end because this prediction uses data from
@ -77,7 +78,9 @@ bool MeshPredictionSchemeParallelogramEncoder<DataTypeT, TransformT,
const CornerTable *const table = this->mesh_data().corner_table(); const CornerTable *const table = this->mesh_data().corner_table();
const std::vector<int32_t> *const vertex_to_data_map = const std::vector<int32_t> *const vertex_to_data_map =
this->mesh_data().vertex_to_data_map(); this->mesh_data().vertex_to_data_map();
for (int p = static_cast<int>(this->mesh_data().data_to_corner_map()->size() - 1); p > 0; --p) { for (int p =
static_cast<int>(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 CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p);
const int dst_offset = p * num_components; const int dst_offset = p * num_components;
if (!ComputeParallelogramPrediction(p, corner_id, table, if (!ComputeParallelogramPrediction(p, corner_id, table,

View File

@ -21,7 +21,7 @@
#include "draco/draco_features.h" #include "draco/draco_features.h"
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" #include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h"
#include "draco/core/bit_coders/rans_bit_decoder.h" #include "draco/compression/bit_coders/rans_bit_decoder.h"
#include "draco/core/varint_decoding.h" #include "draco/core/varint_decoding.h"
#include "draco/core/vector_d.h" #include "draco/core/vector_d.h"
#include "draco/mesh/corner_table.h" #include "draco/mesh/corner_table.h"
@ -97,7 +97,8 @@ class MeshPredictionSchemeTexCoordsDecoder
Vector2f GetTexCoordForEntryId(int entry_id, const DataTypeT *data) const { Vector2f GetTexCoordForEntryId(int entry_id, const DataTypeT *data) const {
const int data_offset = entry_id * num_components_; const int data_offset = entry_id * num_components_;
return Vector2f(static_cast<float>(data[data_offset]), static_cast<float>(data[data_offset + 1])); return Vector2f(static_cast<float>(data[data_offset]),
static_cast<float>(data[data_offset + 1]));
} }
void ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data, void ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data,
@ -122,9 +123,10 @@ bool MeshPredictionSchemeTexCoordsDecoder<DataTypeT, TransformT, MeshDataT>::
entry_to_point_id_map_ = entry_to_point_id_map; entry_to_point_id_map_ = entry_to_point_id_map;
predicted_value_ = predicted_value_ =
std::unique_ptr<DataTypeT[]>(new DataTypeT[num_components]); std::unique_ptr<DataTypeT[]>(new DataTypeT[num_components]);
this->transform().Initialize(num_components); this->transform().Init(num_components);
const int corner_map_size = static_cast<int>(this->mesh_data().data_to_corner_map()->size()); const int corner_map_size =
static_cast<int>(this->mesh_data().data_to_corner_map()->size());
for (int p = 0; p < corner_map_size; ++p) { for (int p = 0; p < corner_map_size; ++p) {
const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p);
ComputePredictedValue(corner_id, out_data, p); ComputePredictedValue(corner_id, out_data, p);

View File

@ -17,7 +17,7 @@
#include <math.h> #include <math.h>
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" #include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h"
#include "draco/core/bit_coders/rans_bit_encoder.h" #include "draco/compression/bit_coders/rans_bit_encoder.h"
#include "draco/core/varint_encoding.h" #include "draco/core/varint_encoding.h"
#include "draco/core/vector_d.h" #include "draco/core/vector_d.h"
#include "draco/mesh/corner_table.h" #include "draco/mesh/corner_table.h"
@ -90,7 +90,8 @@ class MeshPredictionSchemeTexCoordsEncoder
Vector2f GetTexCoordForEntryId(int entry_id, const DataTypeT *data) const { Vector2f GetTexCoordForEntryId(int entry_id, const DataTypeT *data) const {
const int data_offset = entry_id * num_components_; const int data_offset = entry_id * num_components_;
return Vector2f(static_cast<float>(data[data_offset]), static_cast<float>(data[data_offset + 1])); return Vector2f(static_cast<float>(data[data_offset]),
static_cast<float>(data[data_offset + 1]));
} }
void ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data, void ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data,
@ -114,11 +115,12 @@ bool MeshPredictionSchemeTexCoordsEncoder<DataTypeT, TransformT, MeshDataT>::
entry_to_point_id_map_ = entry_to_point_id_map; entry_to_point_id_map_ = entry_to_point_id_map;
predicted_value_ = predicted_value_ =
std::unique_ptr<DataTypeT[]>(new DataTypeT[num_components]); std::unique_ptr<DataTypeT[]>(new DataTypeT[num_components]);
this->transform().Initialize(in_data, size, num_components); this->transform().Init(in_data, size, num_components);
// We start processing from the end because this prediction uses data from // We start processing from the end because this prediction uses data from
// previous entries that could be overwritten when an entry is processed. // previous entries that could be overwritten when an entry is processed.
for (int p = static_cast<int>(this->mesh_data().data_to_corner_map()->size()) - 1; p >= 0; for (int p =
--p) { static_cast<int>(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 CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p);
ComputePredictedValue(corner_id, in_data, p); ComputePredictedValue(corner_id, in_data, p);

View File

@ -17,7 +17,7 @@
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_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/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h"
#include "draco/core/bit_coders/rans_bit_decoder.h" #include "draco/compression/bit_coders/rans_bit_decoder.h"
namespace draco { namespace draco {
@ -85,9 +85,10 @@ bool MeshPredictionSchemeTexCoordsPortableDecoder<
int num_components, int num_components,
const PointIndex *entry_to_point_id_map) { const PointIndex *entry_to_point_id_map) {
predictor_.SetEntryToPointIdMap(entry_to_point_id_map); predictor_.SetEntryToPointIdMap(entry_to_point_id_map);
this->transform().Initialize(num_components); this->transform().Init(num_components);
const int corner_map_size = static_cast<int>(this->mesh_data().data_to_corner_map()->size()); const int corner_map_size =
static_cast<int>(this->mesh_data().data_to_corner_map()->size());
for (int p = 0; p < corner_map_size; ++p) { for (int p = 0; p < corner_map_size; ++p) {
const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p); const CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p);
if (!predictor_.template ComputePredictedValue<false>(corner_id, out_data, if (!predictor_.template ComputePredictedValue<false>(corner_id, out_data,

View File

@ -17,7 +17,7 @@
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_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/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h"
#include "draco/core/bit_coders/rans_bit_encoder.h" #include "draco/compression/bit_coders/rans_bit_encoder.h"
namespace draco { namespace draco {
@ -87,11 +87,12 @@ bool MeshPredictionSchemeTexCoordsPortableEncoder<DataTypeT, TransformT,
int size, int num_components, int size, int num_components,
const PointIndex *entry_to_point_id_map) { const PointIndex *entry_to_point_id_map) {
predictor_.SetEntryToPointIdMap(entry_to_point_id_map); predictor_.SetEntryToPointIdMap(entry_to_point_id_map);
this->transform().Initialize(in_data, size, num_components); this->transform().Init(in_data, size, num_components);
// We start processing from the end because this prediction uses data from // We start processing from the end because this prediction uses data from
// previous entries that could be overwritten when an entry is processed. // previous entries that could be overwritten when an entry is processed.
for (int p = static_cast<int>(this->mesh_data().data_to_corner_map()->size() - 1); p >= 0; for (int p =
--p) { static_cast<int>(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 CornerIndex corner_id = this->mesh_data().data_to_corner_map()->at(p);
predictor_.template ComputePredictedValue<true>(corner_id, in_data, p); predictor_.template ComputePredictedValue<true>(corner_id, in_data, p);

View File

@ -32,7 +32,7 @@ class PredictionSchemeDecodingTransform {
typedef CorrTypeT CorrType; typedef CorrTypeT CorrType;
PredictionSchemeDecodingTransform() : num_components_(0) {} PredictionSchemeDecodingTransform() : num_components_(0) {}
void Initialize(int num_components) { num_components_ = num_components; } void Init(int num_components) { num_components_ = num_components; }
// Computes the original value from the input predicted value and the decoded // Computes the original value from the input predicted value and the decoded
// corrections. The default implementation is equal to std:plus. // corrections. The default implementation is equal to std:plus.
@ -47,7 +47,7 @@ class PredictionSchemeDecodingTransform {
} }
} }
// Decodes any transform specific data. Called before Initialize() method. // Decodes any transform specific data. Called before Init() method.
bool DecodeTransformData(DecoderBuffer * /* buffer */) { return true; } bool DecodeTransformData(DecoderBuffer * /* buffer */) { return true; }
// Should return true if all corrected values are guaranteed to be positive. // Should return true if all corrected values are guaranteed to be positive.

View File

@ -47,7 +47,7 @@ template <typename DataTypeT, class TransformT>
bool PredictionSchemeDeltaDecoder<DataTypeT, TransformT>::ComputeOriginalValues( bool PredictionSchemeDeltaDecoder<DataTypeT, TransformT>::ComputeOriginalValues(
const CorrType *in_corr, DataTypeT *out_data, int size, int num_components, const CorrType *in_corr, DataTypeT *out_data, int size, int num_components,
const PointIndex *) { const PointIndex *) {
this->transform().Initialize(num_components); this->transform().Init(num_components);
// Decode the original value for the first element. // Decode the original value for the first element.
std::unique_ptr<DataTypeT[]> zero_vals(new DataTypeT[num_components]()); std::unique_ptr<DataTypeT[]> zero_vals(new DataTypeT[num_components]());
this->transform().ComputeOriginalValue(zero_vals.get(), in_corr, out_data); this->transform().ComputeOriginalValue(zero_vals.get(), in_corr, out_data);

View File

@ -52,7 +52,7 @@ bool PredictionSchemeDeltaEncoder<
int size, int size,
int num_components, int num_components,
const PointIndex *) { const PointIndex *) {
this->transform().Initialize(in_data, size, num_components); this->transform().Init(in_data, size, num_components);
// Encode data from the back using D(i) = D(i) - D(i - 1). // Encode data from the back using D(i) = D(i) - D(i - 1).
for (int i = size - num_components; i > 0; i -= num_components) { for (int i = size - num_components; i > 0; i -= num_components) {
this->transform().ComputeCorrection( this->transform().ComputeCorrection(

View File

@ -38,8 +38,8 @@ class PredictionSchemeEncodingTransform {
// Performs any custom initialization of the transform for the encoder. // Performs any custom initialization of the transform for the encoder.
// |size| = total number of values in |orig_data| (i.e., number of entries * // |size| = total number of values in |orig_data| (i.e., number of entries *
// number of components). // number of components).
void Initialize(const DataTypeT * /* orig_data */, int /* size */, void Init(const DataTypeT * /* orig_data */, int /* size */,
int num_components) { int num_components) {
num_components_ = num_components; num_components_ = num_components;
} }

View File

@ -40,7 +40,7 @@ class PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform
PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform() {} PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform() {}
// Dummy to fulfill concept. // Dummy to fulfill concept.
void Initialize(int num_components) {} void Init(int num_components) {}
bool DecodeTransformData(DecoderBuffer *buffer) { bool DecodeTransformData(DecoderBuffer *buffer) {
DataTypeT max_quantized_value, center_value; DataTypeT max_quantized_value, center_value;

View File

@ -62,7 +62,7 @@ class PredictionSchemeNormalOctahedronCanonicalizedEncodingTransform
: Base(max_quantized_value) {} : Base(max_quantized_value) {}
// Dummy function to fulfill concept. // Dummy function to fulfill concept.
void Initialize(const DataTypeT *orig_data, int size, int num_components) {} void Init(const DataTypeT *orig_data, int size, int num_components) {}
bool EncodeTransformData(EncoderBuffer *buffer) { bool EncodeTransformData(EncoderBuffer *buffer) {
buffer->Encode(this->max_quantized_value()); buffer->Encode(this->max_quantized_value());

View File

@ -42,7 +42,7 @@ class PredictionSchemeNormalOctahedronDecodingTransform
PredictionSchemeNormalOctahedronDecodingTransform() {} PredictionSchemeNormalOctahedronDecodingTransform() {}
// Dummy function to fulfill concept. // Dummy function to fulfill concept.
void Initialize(int num_components) {} void Init(int num_components) {}
bool DecodeTransformData(DecoderBuffer *buffer) { bool DecodeTransformData(DecoderBuffer *buffer) {
DataTypeT max_quantized_value, center_value; DataTypeT max_quantized_value, center_value;
if (!buffer->Decode(&max_quantized_value)) if (!buffer->Decode(&max_quantized_value))

View File

@ -55,7 +55,7 @@ class PredictionSchemeNormalOctahedronEncodingTransform
DataType max_quantized_value) DataType max_quantized_value)
: Base(max_quantized_value) {} : Base(max_quantized_value) {}
void Initialize(const DataTypeT *orig_data, int size, int num_components) {} void Init(const DataTypeT *orig_data, int size, int num_components) {}
bool EncodeTransformData(EncoderBuffer *buffer) { bool EncodeTransformData(EncoderBuffer *buffer) {
buffer->Encode(this->max_quantized_value()); buffer->Encode(this->max_quantized_value());

View File

@ -62,7 +62,7 @@ class PredictionSchemeNormalOctahedronTransformBase {
inline bool set_max_quantized_value(DataTypeT max_quantized_value) { inline bool set_max_quantized_value(DataTypeT max_quantized_value) {
if (max_quantized_value % 2 == 0) if (max_quantized_value % 2 == 0)
return false; return false;
int q = bits::MostSignificantBit(max_quantized_value) + 1; int q = MostSignificantBit(max_quantized_value) + 1;
return octahedron_tool_box_.SetQuantizationBits(q); return octahedron_tool_box_.SetQuantizationBits(q);
} }

View File

@ -29,8 +29,8 @@ class PredictionSchemeWrapEncodingTransform
typedef CorrTypeT CorrType; typedef CorrTypeT CorrType;
PredictionSchemeWrapEncodingTransform() {} PredictionSchemeWrapEncodingTransform() {}
void Initialize(const DataTypeT *orig_data, int size, int num_components) { void Init(const DataTypeT *orig_data, int size, int num_components) {
PredictionSchemeWrapTransformBase<DataTypeT>::Initialize(num_components); PredictionSchemeWrapTransformBase<DataTypeT>::Init(num_components);
// Go over the original values and compute the bounds. // Go over the original values and compute the bounds.
if (size == 0) if (size == 0)
return; return;

View File

@ -51,7 +51,7 @@ class PredictionSchemeWrapTransformBase {
return PREDICTION_TRANSFORM_WRAP; return PREDICTION_TRANSFORM_WRAP;
} }
void Initialize(int num_components) { void Init(int num_components) {
num_components_ = num_components; num_components_ = num_components;
clamped_value_.resize(num_components); clamped_value_.resize(num_components);
} }

View File

@ -19,8 +19,8 @@ namespace draco {
SequentialAttributeDecoder::SequentialAttributeDecoder() SequentialAttributeDecoder::SequentialAttributeDecoder()
: decoder_(nullptr), attribute_(nullptr), attribute_id_(-1) {} : decoder_(nullptr), attribute_(nullptr), attribute_id_(-1) {}
bool SequentialAttributeDecoder::Initialize(PointCloudDecoder *decoder, bool SequentialAttributeDecoder::Init(PointCloudDecoder *decoder,
int attribute_id) { int attribute_id) {
decoder_ = decoder; decoder_ = decoder;
attribute_ = decoder->point_cloud()->attribute(attribute_id); attribute_ = decoder->point_cloud()->attribute(attribute_id);
attribute_id_ = attribute_id; attribute_id_ = attribute_id;
@ -61,7 +61,8 @@ const PointAttribute *SequentialAttributeDecoder::GetPortableAttribute() {
if (!attribute_->is_mapping_identity() && portable_attribute_ && if (!attribute_->is_mapping_identity() && portable_attribute_ &&
portable_attribute_->is_mapping_identity()) { portable_attribute_->is_mapping_identity()) {
portable_attribute_->SetExplicitMapping(attribute_->indices_map_size()); portable_attribute_->SetExplicitMapping(attribute_->indices_map_size());
for (PointIndex i(0); i < static_cast<uint32_t>(attribute_->indices_map_size()); ++i) { for (PointIndex i(0);
i < static_cast<uint32_t>(attribute_->indices_map_size()); ++i) {
portable_attribute_->SetPointMapEntry(i, attribute_->mapped_index(i)); portable_attribute_->SetPointMapEntry(i, attribute_->mapped_index(i));
} }
} }

View File

@ -29,7 +29,7 @@ class SequentialAttributeDecoder {
SequentialAttributeDecoder(); SequentialAttributeDecoder();
virtual ~SequentialAttributeDecoder() = default; virtual ~SequentialAttributeDecoder() = default;
virtual bool Initialize(PointCloudDecoder *decoder, int attribute_id); virtual bool Init(PointCloudDecoder *decoder, int attribute_id);
// Initialization for a specific attribute. This can be used mostly for // Initialization for a specific attribute. This can be used mostly for
// standalone decoding of an attribute without an PointCloudDecoder. // standalone decoding of an attribute without an PointCloudDecoder.

View File

@ -38,7 +38,7 @@ bool SequentialAttributeDecodersController::DecodeAttributesDecoderData(
sequential_decoders_[i] = CreateSequentialDecoder(decoder_type); sequential_decoders_[i] = CreateSequentialDecoder(decoder_type);
if (!sequential_decoders_[i]) if (!sequential_decoders_[i])
return false; return false;
if (!sequential_decoders_[i]->Initialize(GetDecoder(), GetAttributeId(i))) if (!sequential_decoders_[i]->Init(GetDecoder(), GetAttributeId(i)))
return false; return false;
} }
return true; return true;

View File

@ -22,8 +22,8 @@ SequentialAttributeEncoder::SequentialAttributeEncoder()
attribute_id_(-1), attribute_id_(-1),
is_parent_encoder_(false) {} is_parent_encoder_(false) {}
bool SequentialAttributeEncoder::Initialize(PointCloudEncoder *encoder, bool SequentialAttributeEncoder::Init(PointCloudEncoder *encoder,
int attribute_id) { int attribute_id) {
encoder_ = encoder; encoder_ = encoder;
attribute_ = encoder_->point_cloud()->attribute(attribute_id); attribute_ = encoder_->point_cloud()->attribute(attribute_id);
attribute_id_ = attribute_id; attribute_id_ = attribute_id;

View File

@ -38,7 +38,7 @@ class SequentialAttributeEncoder {
// This method is automatically called by the PointCloudEncoder after all // This method is automatically called by the PointCloudEncoder after all
// attribute encoders are created and it should not be called explicitly from // attribute encoders are created and it should not be called explicitly from
// other places. // other places.
virtual bool Initialize(PointCloudEncoder *encoder, int attribute_id); virtual bool Init(PointCloudEncoder *encoder, int attribute_id);
// Initialization for a specific attribute. This can be used mostly for // Initialization for a specific attribute. This can be used mostly for
// standalone encoding of an attribute without an PointCloudEncoder. // standalone encoding of an attribute without an PointCloudEncoder.
@ -58,7 +58,9 @@ class SequentialAttributeEncoder {
virtual bool IsLossyEncoder() const { return false; } virtual bool IsLossyEncoder() const { return false; }
int NumParentAttributes() const { return static_cast<int>(parent_attributes_.size()); } int NumParentAttributes() const {
return static_cast<int>(parent_attributes_.size());
}
int GetParentAttributeId(int i) const { return parent_attributes_[i]; } int GetParentAttributeId(int i) const { return parent_attributes_[i]; }
const PointAttribute *GetPortableAttribute() const { const PointAttribute *GetPortableAttribute() const {

View File

@ -27,16 +27,16 @@ SequentialAttributeEncodersController::SequentialAttributeEncodersController(
std::unique_ptr<PointsSequencer> sequencer, int att_id) std::unique_ptr<PointsSequencer> sequencer, int att_id)
: AttributesEncoder(att_id), sequencer_(std::move(sequencer)) {} : AttributesEncoder(att_id), sequencer_(std::move(sequencer)) {}
bool SequentialAttributeEncodersController::Initialize( bool SequentialAttributeEncodersController::Init(PointCloudEncoder *encoder,
PointCloudEncoder *encoder, const PointCloud *pc) { const PointCloud *pc) {
if (!AttributesEncoder::Initialize(encoder, pc)) if (!AttributesEncoder::Init(encoder, pc))
return false; return false;
if (!CreateSequentialEncoders()) if (!CreateSequentialEncoders())
return false; return false;
// Initialize all value encoders. // Initialize all value encoders.
for (uint32_t i = 0; i < num_attributes(); ++i) { for (uint32_t i = 0; i < num_attributes(); ++i) {
const int32_t att_id = GetAttributeId(i); const int32_t att_id = GetAttributeId(i);
if (!sequential_encoders_[i]->Initialize(encoder, att_id)) if (!sequential_encoders_[i]->Init(encoder, att_id))
return false; return false;
} }
return true; return true;

View File

@ -35,7 +35,7 @@ class SequentialAttributeEncodersController : public AttributesEncoder {
SequentialAttributeEncodersController( SequentialAttributeEncodersController(
std::unique_ptr<PointsSequencer> sequencer, int point_attrib_id); std::unique_ptr<PointsSequencer> sequencer, int point_attrib_id);
bool Initialize(PointCloudEncoder *encoder, const PointCloud *pc) override; bool Init(PointCloudEncoder *encoder, const PointCloud *pc) override;
bool EncodeAttributesEncoderData(EncoderBuffer *out_buffer) override; bool EncodeAttributesEncoderData(EncoderBuffer *out_buffer) override;
bool EncodeAttributes(EncoderBuffer *buffer) override; bool EncodeAttributes(EncoderBuffer *buffer) override;
uint8_t GetUniqueId() const override { return BASIC_ATTRIBUTE_ENCODER; } uint8_t GetUniqueId() const override { return BASIC_ATTRIBUTE_ENCODER; }

View File

@ -16,15 +16,15 @@
#include "draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.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/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h"
#include "draco/core/symbol_decoding.h" #include "draco/compression/entropy/symbol_decoding.h"
namespace draco { namespace draco {
SequentialIntegerAttributeDecoder::SequentialIntegerAttributeDecoder() {} SequentialIntegerAttributeDecoder::SequentialIntegerAttributeDecoder() {}
bool SequentialIntegerAttributeDecoder::Initialize(PointCloudDecoder *decoder, bool SequentialIntegerAttributeDecoder::Init(PointCloudDecoder *decoder,
int attribute_id) { int attribute_id) {
if (!SequentialAttributeDecoder::Initialize(decoder, attribute_id)) if (!SequentialAttributeDecoder::Init(decoder, attribute_id))
return false; return false;
return true; return true;
} }
@ -99,7 +99,8 @@ bool SequentialIntegerAttributeDecoder::DecodeIntegerValues(
return false; return false;
if (compressed > 0) { if (compressed > 0) {
// Decode compressed values. // Decode compressed values.
if (!DecodeSymbols(static_cast<uint32_t>(num_values), num_components, in_buffer, if (!DecodeSymbols(static_cast<uint32_t>(num_values), num_components,
in_buffer,
reinterpret_cast<uint32_t *>(portable_attribute_data))) reinterpret_cast<uint32_t *>(portable_attribute_data)))
return false; return false;
} else { } else {
@ -118,7 +119,8 @@ bool SequentialIntegerAttributeDecoder::DecodeIntegerValues(
} else { } else {
if (portable_attribute()->buffer()->data_size() < num_bytes * num_values) if (portable_attribute()->buffer()->data_size() < num_bytes * num_values)
return false; return false;
if (in_buffer->remaining_size() < static_cast<int64_t>(num_bytes) * static_cast<int64_t>(num_values)) if (in_buffer->remaining_size() <
static_cast<int64_t>(num_bytes) * static_cast<int64_t>(num_values))
return false; return false;
for (size_t i = 0; i < num_values; ++i) { for (size_t i = 0; i < num_values; ++i) {
in_buffer->Decode(portable_attribute_data + i, num_bytes); in_buffer->Decode(portable_attribute_data + i, num_bytes);
@ -130,8 +132,8 @@ bool SequentialIntegerAttributeDecoder::DecodeIntegerValues(
!prediction_scheme_->AreCorrectionsPositive())) { !prediction_scheme_->AreCorrectionsPositive())) {
// Convert the values back to the original signed format. // Convert the values back to the original signed format.
ConvertSymbolsToSignedInts( ConvertSymbolsToSignedInts(
reinterpret_cast<const uint32_t *>(portable_attribute_data), static_cast<int>(num_values), reinterpret_cast<const uint32_t *>(portable_attribute_data),
portable_attribute_data); static_cast<int>(num_values), portable_attribute_data);
} }
// If the data was encoded with a prediction scheme, we must revert it. // If the data was encoded with a prediction scheme, we must revert it.
@ -141,8 +143,8 @@ bool SequentialIntegerAttributeDecoder::DecodeIntegerValues(
if (num_values > 0) { if (num_values > 0) {
if (!prediction_scheme_->ComputeOriginalValues( if (!prediction_scheme_->ComputeOriginalValues(
portable_attribute_data, portable_attribute_data, static_cast<int>(num_values), portable_attribute_data, portable_attribute_data,
num_components, point_ids.data())) { static_cast<int>(num_values), num_components, point_ids.data())) {
return false; return false;
} }
} }

View File

@ -26,7 +26,7 @@ namespace draco {
class SequentialIntegerAttributeDecoder : public SequentialAttributeDecoder { class SequentialIntegerAttributeDecoder : public SequentialAttributeDecoder {
public: public:
SequentialIntegerAttributeDecoder(); SequentialIntegerAttributeDecoder();
bool Initialize(PointCloudDecoder *decoder, int attribute_id) override; bool Init(PointCloudDecoder *decoder, int attribute_id) override;
bool TransformAttributeToOriginalFormat( bool TransformAttributeToOriginalFormat(
const std::vector<PointIndex> &point_ids) override; const std::vector<PointIndex> &point_ids) override;

View File

@ -16,16 +16,16 @@
#include "draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.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/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h"
#include "draco/compression/entropy/symbol_encoding.h"
#include "draco/core/bit_utils.h" #include "draco/core/bit_utils.h"
#include "draco/core/symbol_encoding.h"
namespace draco { namespace draco {
SequentialIntegerAttributeEncoder::SequentialIntegerAttributeEncoder() {} SequentialIntegerAttributeEncoder::SequentialIntegerAttributeEncoder() {}
bool SequentialIntegerAttributeEncoder::Initialize(PointCloudEncoder *encoder, bool SequentialIntegerAttributeEncoder::Init(PointCloudEncoder *encoder,
int attribute_id) { int attribute_id) {
if (!SequentialAttributeEncoder::Initialize(encoder, attribute_id)) if (!SequentialAttributeEncoder::Init(encoder, attribute_id))
return false; return false;
if (GetUniqueId() == SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER) { if (GetUniqueId() == SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER) {
// When encoding integers, this encoder currently works only for integer // When encoding integers, this encoder currently works only for integer
@ -118,7 +118,8 @@ bool SequentialIntegerAttributeEncoder::EncodeValues(
} }
const int num_components = portable_attribute()->num_components(); const int num_components = portable_attribute()->num_components();
const int num_values = static_cast<int>(num_components * portable_attribute()->size()); const int num_values =
static_cast<int>(num_components * portable_attribute()->size());
const int32_t *const portable_attribute_data = GetPortableAttributeData(); const int32_t *const portable_attribute_data = GetPortableAttributeData();
// We need to keep the portable data intact, but several encoding steps can // We need to keep the portable data intact, but several encoding steps can
@ -152,8 +153,8 @@ bool SequentialIntegerAttributeEncoder::EncodeValues(
10 - encoder()->options()->GetSpeed()); 10 - encoder()->options()->GetSpeed());
} }
if (!EncodeSymbols(reinterpret_cast<uint32_t *>(encoded_data.data()), if (!EncodeSymbols(reinterpret_cast<uint32_t *>(encoded_data.data()),
static_cast<int>(point_ids.size()) * num_components, num_components, static_cast<int>(point_ids.size()) * num_components,
&symbol_encoding_options, out_buffer)) { num_components, &symbol_encoding_options, out_buffer)) {
return false; return false;
} }
} else { } else {
@ -168,7 +169,7 @@ bool SequentialIntegerAttributeEncoder::EncodeValues(
// Compute the msb of the ORed value. // Compute the msb of the ORed value.
int value_msb_pos = 0; int value_msb_pos = 0;
if (masked_value != 0) { if (masked_value != 0) {
value_msb_pos = bits::MostSignificantBit(masked_value); value_msb_pos = MostSignificantBit(masked_value);
} }
const int num_bytes = 1 + value_msb_pos / 8; const int num_bytes = 1 + value_msb_pos / 8;

View File

@ -30,7 +30,7 @@ class SequentialIntegerAttributeEncoder : public SequentialAttributeEncoder {
return SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER; return SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER;
} }
bool Initialize(PointCloudEncoder *encoder, int attribute_id) override; bool Init(PointCloudEncoder *encoder, int attribute_id) override;
bool TransformAttributeToPortableFormat( bool TransformAttributeToPortableFormat(
const std::vector<PointIndex> &point_ids) override; const std::vector<PointIndex> &point_ids) override;

View File

@ -21,9 +21,9 @@ namespace draco {
SequentialNormalAttributeDecoder::SequentialNormalAttributeDecoder() SequentialNormalAttributeDecoder::SequentialNormalAttributeDecoder()
: quantization_bits_(-1) {} : quantization_bits_(-1) {}
bool SequentialNormalAttributeDecoder::Initialize(PointCloudDecoder *decoder, bool SequentialNormalAttributeDecoder::Init(PointCloudDecoder *decoder,
int attribute_id) { int attribute_id) {
if (!SequentialIntegerAttributeDecoder::Initialize(decoder, attribute_id)) if (!SequentialIntegerAttributeDecoder::Init(decoder, attribute_id))
return false; return false;
// Currently, this encoder works only for 3-component normal vectors. // Currently, this encoder works only for 3-component normal vectors.
if (attribute()->num_components() != 3) if (attribute()->num_components() != 3)

View File

@ -29,7 +29,7 @@ class SequentialNormalAttributeDecoder
: public SequentialIntegerAttributeDecoder { : public SequentialIntegerAttributeDecoder {
public: public:
SequentialNormalAttributeDecoder(); SequentialNormalAttributeDecoder();
bool Initialize(PointCloudDecoder *decoder, int attribute_id) override; bool Init(PointCloudDecoder *decoder, int attribute_id) override;
protected: protected:
int32_t GetNumValueComponents() const override { int32_t GetNumValueComponents() const override {

View File

@ -17,9 +17,9 @@
namespace draco { namespace draco {
bool SequentialNormalAttributeEncoder::Initialize(PointCloudEncoder *encoder, bool SequentialNormalAttributeEncoder::Init(PointCloudEncoder *encoder,
int attribute_id) { int attribute_id) {
if (!SequentialIntegerAttributeEncoder::Initialize(encoder, attribute_id)) if (!SequentialIntegerAttributeEncoder::Init(encoder, attribute_id))
return false; return false;
// Currently this encoder works only for 3-component normal vectors. // Currently this encoder works only for 3-component normal vectors.
if (attribute()->num_components() != 3) if (attribute()->num_components() != 3)

View File

@ -40,7 +40,7 @@ class SequentialNormalAttributeEncoder
bool EncodeDataNeededByPortableTransform(EncoderBuffer *out_buffer) override; bool EncodeDataNeededByPortableTransform(EncoderBuffer *out_buffer) override;
protected: protected:
bool Initialize(PointCloudEncoder *encoder, int attribute_id) override; bool Init(PointCloudEncoder *encoder, int attribute_id) override;
// Put quantized values in portable attribute for sequential encoding. // Put quantized values in portable attribute for sequential encoding.
bool PrepareValues(const std::vector<PointIndex> &point_ids, bool PrepareValues(const std::vector<PointIndex> &point_ids,
@ -55,8 +55,11 @@ class SequentialNormalAttributeEncoder
attribute_id(), "quantization_bits", -1); attribute_id(), "quantization_bits", -1);
const int32_t max_value = (1 << quantization_bits) - 1; const int32_t max_value = (1 << quantization_bits) - 1;
const Transform transform(max_value); const Transform transform(max_value);
PredictionSchemeMethod prediction_method = const PredictionSchemeMethod default_prediction_method =
SelectPredictionMethod(attribute_id(), encoder()); 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) { if (prediction_method == MESH_PREDICTION_GEOMETRIC_NORMAL) {
return CreatePredictionSchemeForEncoder<int32_t, Transform>( return CreatePredictionSchemeForEncoder<int32_t, Transform>(
MESH_PREDICTION_GEOMETRIC_NORMAL, attribute_id(), encoder(), MESH_PREDICTION_GEOMETRIC_NORMAL, attribute_id(), encoder(),

View File

@ -22,9 +22,9 @@ namespace draco {
SequentialQuantizationAttributeDecoder::SequentialQuantizationAttributeDecoder() SequentialQuantizationAttributeDecoder::SequentialQuantizationAttributeDecoder()
: quantization_bits_(-1), max_value_dif_(0.f) {} : quantization_bits_(-1), max_value_dif_(0.f) {}
bool SequentialQuantizationAttributeDecoder::Initialize( bool SequentialQuantizationAttributeDecoder::Init(PointCloudDecoder *decoder,
PointCloudDecoder *decoder, int attribute_id) { int attribute_id) {
if (!SequentialIntegerAttributeDecoder::Initialize(decoder, attribute_id)) if (!SequentialIntegerAttributeDecoder::Init(decoder, attribute_id))
return false; return false;
const PointAttribute *const attribute = const PointAttribute *const attribute =
decoder->point_cloud()->attribute(attribute_id); decoder->point_cloud()->attribute(attribute_id);

View File

@ -27,7 +27,7 @@ class SequentialQuantizationAttributeDecoder
: public SequentialIntegerAttributeDecoder { : public SequentialIntegerAttributeDecoder {
public: public:
SequentialQuantizationAttributeDecoder(); SequentialQuantizationAttributeDecoder();
bool Initialize(PointCloudDecoder *decoder, int attribute_id) override; bool Init(PointCloudDecoder *decoder, int attribute_id) override;
protected: protected:
bool DecodeIntegerValues(const std::vector<PointIndex> &point_ids, bool DecodeIntegerValues(const std::vector<PointIndex> &point_ids,

View File

@ -21,9 +21,9 @@ namespace draco {
SequentialQuantizationAttributeEncoder:: SequentialQuantizationAttributeEncoder::
SequentialQuantizationAttributeEncoder() {} SequentialQuantizationAttributeEncoder() {}
bool SequentialQuantizationAttributeEncoder::Initialize( bool SequentialQuantizationAttributeEncoder::Init(PointCloudEncoder *encoder,
PointCloudEncoder *encoder, int attribute_id) { int attribute_id) {
if (!SequentialIntegerAttributeEncoder::Initialize(encoder, attribute_id)) if (!SequentialIntegerAttributeEncoder::Init(encoder, attribute_id))
return false; return false;
// This encoder currently works only for floating point attributes. // This encoder currently works only for floating point attributes.
const PointAttribute *const attribute = const PointAttribute *const attribute =

View File

@ -31,7 +31,7 @@ class SequentialQuantizationAttributeEncoder
uint8_t GetUniqueId() const override { uint8_t GetUniqueId() const override {
return SEQUENTIAL_ATTRIBUTE_ENCODER_QUANTIZATION; return SEQUENTIAL_ATTRIBUTE_ENCODER_QUANTIZATION;
} }
bool Initialize(PointCloudEncoder *encoder, int attribute_id) override; bool Init(PointCloudEncoder *encoder, int attribute_id) override;
bool IsLossyEncoder() const override { return true; } bool IsLossyEncoder() const override { return true; }

View File

@ -13,8 +13,8 @@
// limitations under the License. // limitations under the License.
// //
// File provides shared functions for adaptive rANS bit coding. // File provides shared functions for adaptive rANS bit coding.
#ifndef DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_ #ifndef DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_
#define DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_ #define DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_
#include "draco/core/macros.h" #include "draco/core/macros.h"
@ -40,4 +40,4 @@ inline double update_probability(double old_p, bool bit) {
} // namespace draco } // namespace draco
#endif // DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_ #endif // DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_CODING_SHARED_H_

View File

@ -12,9 +12,9 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
#include "draco/core/bit_coders/adaptive_rans_bit_decoder.h" #include "draco/compression/bit_coders/adaptive_rans_bit_decoder.h"
#include "draco/core/bit_coders/adaptive_rans_bit_coding_shared.h" #include "draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h"
namespace draco { namespace draco {

View File

@ -13,12 +13,12 @@
// limitations under the License. // limitations under the License.
// //
// File provides basic classes and functions for rANS bit decoding. // File provides basic classes and functions for rANS bit decoding.
#ifndef DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_ #ifndef DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_
#define DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_ #define DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_
#include <vector> #include <vector>
#include "draco/core/ans.h" #include "draco/compression/entropy/ans.h"
#include "draco/core/decoder_buffer.h" #include "draco/core/decoder_buffer.h"
namespace draco { namespace draco {
@ -51,4 +51,4 @@ class AdaptiveRAnsBitDecoder {
} // namespace draco } // namespace draco
#endif // DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_ #endif // DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_DECODER_H_

View File

@ -12,9 +12,9 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
#include "draco/core/bit_coders/adaptive_rans_bit_encoder.h" #include "draco/compression/bit_coders/adaptive_rans_bit_encoder.h"
#include "draco/core/bit_coders/adaptive_rans_bit_coding_shared.h" #include "draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h"
namespace draco { namespace draco {

View File

@ -13,12 +13,12 @@
// limitations under the License. // limitations under the License.
// //
// File provides basic classes and functions for rANS bit encoding. // File provides basic classes and functions for rANS bit encoding.
#ifndef DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_ #ifndef DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_
#define DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_ #define DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_
#include <vector> #include <vector>
#include "draco/core/ans.h" #include "draco/compression/entropy/ans.h"
#include "draco/core/encoder_buffer.h" #include "draco/core/encoder_buffer.h"
namespace draco { namespace draco {
@ -58,4 +58,4 @@ class AdaptiveRAnsBitEncoder {
} // namespace draco } // namespace draco
#endif // DRACO_CORE_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_ #endif // DRACO_COMPRESSION_BIT_CODERS_ADAPTIVE_RANS_BIT_ENCODER_H_

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
#include "draco/core/bit_coders/direct_bit_decoder.h" #include "draco/compression/bit_coders/direct_bit_decoder.h"
namespace draco { namespace draco {

View File

@ -13,8 +13,8 @@
// limitations under the License. // limitations under the License.
// //
// File provides direct encoding of bits with arithmetic encoder interface. // File provides direct encoding of bits with arithmetic encoder interface.
#ifndef DRACO_CORE_BIT_CODERS_DIRECT_BIT_DECODER_H_ #ifndef DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_DECODER_H_
#define DRACO_CORE_BIT_CODERS_DIRECT_BIT_DECODER_H_ #define DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_DECODER_H_
#include <vector> #include <vector>
@ -87,4 +87,4 @@ class DirectBitDecoder {
} // namespace draco } // namespace draco
#endif // DRACO_CORE_BIT_CODERS_DIRECT_BIT_DECODER_H_ #endif // DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_DECODER_H_

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
#include "draco/core/bit_coders/direct_bit_encoder.h" #include "draco/compression/bit_coders/direct_bit_encoder.h"
namespace draco { namespace draco {

View File

@ -13,8 +13,8 @@
// limitations under the License. // limitations under the License.
// //
// File provides direct encoding of bits with arithmetic encoder interface. // File provides direct encoding of bits with arithmetic encoder interface.
#ifndef DRACO_CORE_BIT_CODERS_DIRECT_BIT_ENCODER_H_ #ifndef DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_ENCODER_H_
#define DRACO_CORE_BIT_CODERS_DIRECT_BIT_ENCODER_H_ #define DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_ENCODER_H_
#include <vector> #include <vector>
@ -86,4 +86,4 @@ class DirectBitEncoder {
} // namespace draco } // namespace draco
#endif // DRACO_CORE_BIT_CODERS_DIRECT_BIT_ENCODER_H_ #endif // DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_ENCODER_H_

View File

@ -13,8 +13,8 @@
// limitations under the License. // limitations under the License.
// //
// File provides direct encoding of bits with arithmetic encoder interface. // File provides direct encoding of bits with arithmetic encoder interface.
#ifndef DRACO_CORE_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_ #ifndef DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_
#define DRACO_CORE_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_ #define DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_
#include <vector> #include <vector>
@ -73,4 +73,4 @@ class FoldedBit32Decoder {
} // namespace draco } // namespace draco
#endif // DRACO_CORE_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_ #endif // DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_

View File

@ -13,8 +13,8 @@
// limitations under the License. // limitations under the License.
// //
// File provides direct encoding of bits with arithmetic encoder interface. // File provides direct encoding of bits with arithmetic encoder interface.
#ifndef DRACO_CORE_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_ #ifndef DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_
#define DRACO_CORE_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_ #define DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_
#include <vector> #include <vector>
@ -79,4 +79,4 @@ class FoldedBit32Encoder {
} // namespace draco } // namespace draco
#endif // DRACO_CORE_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_ #endif // DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
#include "draco/core/bit_coders/rans_bit_decoder.h" #include "draco/compression/bit_coders/rans_bit_decoder.h"
#include "draco/compression/config/compression_shared.h" #include "draco/compression/config/compression_shared.h"
#include "draco/core/bit_utils.h" #include "draco/core/bit_utils.h"
@ -35,6 +35,7 @@ bool RAnsBitDecoder::StartDecoding(DecoderBuffer *source_buffer) {
if (source_buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 2)) { if (source_buffer->bitstream_version() < DRACO_BITSTREAM_VERSION(2, 2)) {
if (!source_buffer->Decode(&size_in_bytes)) if (!source_buffer->Decode(&size_in_bytes))
return false; return false;
} else } else
#endif #endif
{ {

View File

@ -13,14 +13,14 @@
// limitations under the License. // limitations under the License.
// //
// File provides basic classes and functions for rANS coding. // File provides basic classes and functions for rANS coding.
#ifndef DRACO_CORE_BIT_CODERS_RANS_BIT_DECODER_H_ #ifndef DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_
#define DRACO_CORE_BIT_CODERS_RANS_BIT_DECODER_H_ #define DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_
#include <vector> #include <vector>
#include "draco/draco_features.h" #include "draco/draco_features.h"
#include "draco/core/ans.h" #include "draco/compression/entropy/ans.h"
#include "draco/core/decoder_buffer.h" #include "draco/core/decoder_buffer.h"
namespace draco { namespace draco {
@ -53,4 +53,4 @@ class RAnsBitDecoder {
} // namespace draco } // namespace draco
#endif // DRACO_CORE_BIT_CODERS_RANS_BIT_DECODER_H_ #endif // DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_

View File

@ -12,9 +12,9 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
#include "draco/core/bit_coders/rans_bit_encoder.h" #include "draco/compression/bit_coders/rans_bit_encoder.h"
#include "draco/core/ans.h" #include "draco/compression/entropy/ans.h"
#include "draco/core/bit_utils.h" #include "draco/core/bit_utils.h"
#include "draco/core/varint_encoding.h" #include "draco/core/varint_encoding.h"
@ -46,15 +46,15 @@ void RAnsBitEncoder::EncodeLeastSignificantBits32(int nbits, uint32_t value) {
DRACO_DCHECK_EQ(true, nbits <= 32); DRACO_DCHECK_EQ(true, nbits <= 32);
DRACO_DCHECK_EQ(true, nbits > 0); DRACO_DCHECK_EQ(true, nbits > 0);
const uint32_t reversed = bits::ReverseBits32(value) >> (32 - nbits); const uint32_t reversed = ReverseBits32(value) >> (32 - nbits);
const int ones = bits::CountOnes32(reversed); const int ones = CountOneBits32(reversed);
bit_counts_[0] += (nbits - ones); bit_counts_[0] += (nbits - ones);
bit_counts_[1] += ones; bit_counts_[1] += ones;
const int remaining = 32 - num_local_bits_; const int remaining = 32 - num_local_bits_;
if (nbits <= remaining) { if (nbits <= remaining) {
bits::CopyBits32(&local_bits_, num_local_bits_, reversed, 0, nbits); CopyBits32(&local_bits_, num_local_bits_, reversed, 0, nbits);
num_local_bits_ += nbits; num_local_bits_ += nbits;
if (num_local_bits_ == 32) { if (num_local_bits_ == 32) {
bits_.push_back(local_bits_); bits_.push_back(local_bits_);
@ -62,10 +62,10 @@ void RAnsBitEncoder::EncodeLeastSignificantBits32(int nbits, uint32_t value) {
num_local_bits_ = 0; num_local_bits_ = 0;
} }
} else { } else {
bits::CopyBits32(&local_bits_, num_local_bits_, reversed, 0, remaining); CopyBits32(&local_bits_, num_local_bits_, reversed, 0, remaining);
bits_.push_back(local_bits_); bits_.push_back(local_bits_);
local_bits_ = 0; local_bits_ = 0;
bits::CopyBits32(&local_bits_, 0, reversed, remaining, nbits - remaining); CopyBits32(&local_bits_, 0, reversed, remaining, nbits - remaining);
num_local_bits_ = nbits - remaining; num_local_bits_ = nbits - remaining;
} }
} }

Some files were not shown because too many files have changed in this diff Show More