[Bf-blender-cvs] [9febff7e14c] master: glTF: upgrade Draco to version 1.3.5 and add mesh skinning support
Jim Eckerlein
noreply at git.blender.org
Thu Dec 5 19:40:17 CET 2019
Commit: 9febff7e14c564fc560f48626817350a1bf8086f
Author: Jim Eckerlein
Date: Thu Dec 5 19:11:53 2019 +0100
Branches: master
https://developer.blender.org/rB9febff7e14c564fc560f48626817350a1bf8086f
glTF: upgrade Draco to version 1.3.5 and add mesh skinning support
This will fix exporting meshes with armatures using Draco compression, like:
https://github.com/KhronosGroup/glTF-Blender-IO/issues/617
Differential Revision: https://developer.blender.org/D6342
===================================================================
M extern/draco/CMakeLists.txt
M extern/draco/dracoenc/src/draco/attributes/attribute_quantization_transform.cc
M extern/draco/dracoenc/src/draco/attributes/geometry_indices.h
M extern/draco/dracoenc/src/draco/attributes/point_attribute.cc
M extern/draco/dracoenc/src/draco/attributes/point_attribute.h
M extern/draco/dracoenc/src/draco/compression/attributes/point_d_vector.h
M extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h
M extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc
M extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h
M extern/draco/dracoenc/src/draco/compression/attributes/sequential_attribute_decoders_controller.cc
M extern/draco/dracoenc/src/draco/compression/attributes/sequential_attribute_encoders_controller.cc
M extern/draco/dracoenc/src/draco/compression/decode.cc
M extern/draco/dracoenc/src/draco/compression/decode.h
M extern/draco/dracoenc/src/draco/compression/encode_base.h
M extern/draco/dracoenc/src/draco/compression/entropy/ans.h
M extern/draco/dracoenc/src/draco/compression/entropy/rans_symbol_coding.h
M extern/draco/dracoenc/src/draco/compression/expert_encode.cc
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_edgebreaker_encoder.cc
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_edgebreaker_encoder.h
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_edgebreaker_encoder_impl.cc
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_edgebreaker_encoder_impl.h
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_edgebreaker_encoder_impl_interface.h
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_encoder.cc
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_encoder.h
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_encoder_test.cc
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_sequential_encoder.cc
M extern/draco/dracoenc/src/draco/compression/mesh/mesh_sequential_encoder.h
M extern/draco/dracoenc/src/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.h
M extern/draco/dracoenc/src/draco/compression/point_cloud/algorithms/float_points_tree_decoder.h
M extern/draco/dracoenc/src/draco/compression/point_cloud/algorithms/point_cloud_compression_method.h
M extern/draco/dracoenc/src/draco/compression/point_cloud/point_cloud_decoder.cc
M extern/draco/dracoenc/src/draco/compression/point_cloud/point_cloud_encoder.cc
M extern/draco/dracoenc/src/draco/compression/point_cloud/point_cloud_encoder.h
M extern/draco/dracoenc/src/draco/compression/point_cloud/point_cloud_kd_tree_encoder.cc
M extern/draco/dracoenc/src/draco/compression/point_cloud/point_cloud_kd_tree_encoder.h
M extern/draco/dracoenc/src/draco/compression/point_cloud/point_cloud_sequential_encoder.cc
M extern/draco/dracoenc/src/draco/compression/point_cloud/point_cloud_sequential_encoder.h
M extern/draco/dracoenc/src/draco/core/data_buffer.cc
M extern/draco/dracoenc/src/draco/core/draco_test_utils.cc
M extern/draco/dracoenc/src/draco/core/draco_test_utils.h
M extern/draco/dracoenc/src/draco/core/draco_types.cc
M extern/draco/dracoenc/src/draco/core/draco_types.h
M extern/draco/dracoenc/src/draco/core/draco_version.h
M extern/draco/dracoenc/src/draco/core/macros.h
M extern/draco/dracoenc/src/draco/core/math_utils.h
M extern/draco/dracoenc/src/draco/core/math_utils_test.cc
M extern/draco/dracoenc/src/draco/core/options.cc
M extern/draco/dracoenc/src/draco/core/options.h
M extern/draco/dracoenc/src/draco/core/status.h
A extern/draco/dracoenc/src/draco/core/status_or.h
M extern/draco/dracoenc/src/draco/core/status_test.cc
M extern/draco/dracoenc/src/draco/core/vector_d.h
M extern/draco/dracoenc/src/draco/core/vector_d_test.cc
M extern/draco/dracoenc/src/draco/io/mesh_io.cc
M extern/draco/dracoenc/src/draco/io/mesh_io.h
M extern/draco/dracoenc/src/draco/io/obj_decoder.cc
M extern/draco/dracoenc/src/draco/io/obj_encoder.h
M extern/draco/dracoenc/src/draco/io/parser_utils.cc
M extern/draco/dracoenc/src/draco/io/ply_decoder.cc
M extern/draco/dracoenc/src/draco/io/ply_decoder.h
M extern/draco/dracoenc/src/draco/io/ply_decoder_test.cc
M extern/draco/dracoenc/src/draco/io/ply_reader.cc
M extern/draco/dracoenc/src/draco/io/ply_reader.h
M extern/draco/dracoenc/src/draco/io/ply_reader_test.cc
M extern/draco/dracoenc/src/draco/io/point_cloud_io.cc
M extern/draco/dracoenc/src/draco/mesh/corner_table.cc
M extern/draco/dracoenc/src/draco/mesh/corner_table.h
M extern/draco/dracoenc/src/draco/mesh/mesh.cc
M extern/draco/dracoenc/src/draco/mesh/mesh.h
M extern/draco/dracoenc/src/draco/mesh/mesh_misc_functions.h
M extern/draco/dracoenc/src/draco/mesh/triangle_soup_mesh_builder.cc
M extern/draco/dracoenc/src/draco/metadata/metadata.h
M extern/draco/dracoenc/src/draco/metadata/metadata_encoder.cc
M extern/draco/dracoenc/src/draco/metadata/metadata_encoder_test.cc
M extern/draco/dracoenc/src/draco/point_cloud/point_cloud.cc
M extern/draco/dracoenc/src/draco/point_cloud/point_cloud.h
M extern/draco/dracoenc/src/draco/point_cloud/point_cloud_builder.cc
M extern/draco/dracoenc/src/draco/tools/draco_decoder.cc
M extern/draco/dracoenc/src/draco/tools/draco_encoder.cc
M extern/draco/src/draco-compressor.cpp
A extern/draco/src/draco-compressor.h
===================================================================
diff --git a/extern/draco/CMakeLists.txt b/extern/draco/CMakeLists.txt
index c51af24c9a4..1355766960a 100644
--- a/extern/draco/CMakeLists.txt
+++ b/extern/draco/CMakeLists.txt
@@ -24,6 +24,6 @@ set(CMAKE_CXX_STANDARD 14)
add_subdirectory(dracoenc)
# Build blender-draco-exporter module.
-add_library(extern_draco SHARED src/draco-compressor.cpp)
+add_library(extern_draco SHARED src/draco-compressor.cpp src/draco-compressor.h)
target_include_directories(extern_draco PUBLIC dracoenc/src)
target_link_libraries(extern_draco PUBLIC dracoenc)
diff --git a/extern/draco/dracoenc/src/draco/attributes/attribute_quantization_transform.cc b/extern/draco/dracoenc/src/draco/attributes/attribute_quantization_transform.cc
index 41193f1452f..237becefc61 100644
--- a/extern/draco/dracoenc/src/draco/attributes/attribute_quantization_transform.cc
+++ b/extern/draco/dracoenc/src/draco/attributes/attribute_quantization_transform.cc
@@ -92,6 +92,11 @@ bool AttributeQuantizationTransform::ComputeParameters(
range_ = dif;
}
+ // In case all values are the same, initialize the range to unit length. This
+ // will ensure that all values are quantized properly to the same value.
+ if (range_ == 0.f)
+ range_ = 1.f;
+
return true;
}
diff --git a/extern/draco/dracoenc/src/draco/attributes/geometry_indices.h b/extern/draco/dracoenc/src/draco/attributes/geometry_indices.h
index 5244056f0aa..80e43e30a13 100644
--- a/extern/draco/dracoenc/src/draco/attributes/geometry_indices.h
+++ b/extern/draco/dracoenc/src/draco/attributes/geometry_indices.h
@@ -28,11 +28,11 @@ DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, AttributeValueIndex)
// Index of a point in a PointCloud.
DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, PointIndex)
// Vertex index in a Mesh or CornerTable.
-DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, VertexIndex);
+DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, VertexIndex)
// Corner index that identifies a corner in a Mesh or CornerTable.
-DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, CornerIndex);
+DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, CornerIndex)
// Face index for Mesh and CornerTable.
-DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, FaceIndex);
+DEFINE_NEW_DRACO_INDEX_TYPE(uint32_t, FaceIndex)
// Constants denoting invalid indices.
static constexpr AttributeValueIndex kInvalidAttributeValueIndex(
diff --git a/extern/draco/dracoenc/src/draco/attributes/point_attribute.cc b/extern/draco/dracoenc/src/draco/attributes/point_attribute.cc
index 4428f332b93..0c4e8e1c738 100644
--- a/extern/draco/dracoenc/src/draco/attributes/point_attribute.cc
+++ b/extern/draco/dracoenc/src/draco/attributes/point_attribute.cc
@@ -64,7 +64,7 @@ bool PointAttribute::Reset(size_t num_attribute_values) {
return true;
}
-#ifdef DRACO_ATTRIBUTE_DEDUPLICATION_SUPPORTED
+#ifdef DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED
AttributeValueIndex::ValueType PointAttribute::DeduplicateValues(
const GeometryAttribute &in_att) {
return DeduplicateValues(in_att, AttributeValueIndex(0));
diff --git a/extern/draco/dracoenc/src/draco/attributes/point_attribute.h b/extern/draco/dracoenc/src/draco/attributes/point_attribute.h
index dffde50356d..46e58a40aa1 100644
--- a/extern/draco/dracoenc/src/draco/attributes/point_attribute.h
+++ b/extern/draco/dracoenc/src/draco/attributes/point_attribute.h
@@ -105,7 +105,7 @@ class PointAttribute : public GeometryAttribute {
return GetValue(mapped_index(point_index), out_data);
}
-#ifdef DRACO_ATTRIBUTE_DEDUPLICATION_SUPPORTED
+#ifdef DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED
// Deduplicate |in_att| values into |this| attribute. |in_att| can be equal
// to |this|.
// Returns -1 if the deduplication failed.
@@ -130,7 +130,7 @@ class PointAttribute : public GeometryAttribute {
}
private:
-#ifdef DRACO_ATTRIBUTE_DEDUPLICATION_SUPPORTED
+#ifdef DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED
template <typename T>
AttributeValueIndex::ValueType DeduplicateTypedValues(
const GeometryAttribute &in_att, AttributeValueIndex in_att_offset);
diff --git a/extern/draco/dracoenc/src/draco/compression/attributes/point_d_vector.h b/extern/draco/dracoenc/src/draco/compression/attributes/point_d_vector.h
index 4148770fe77..ce99c8014d7 100644
--- a/extern/draco/dracoenc/src/draco/compression/attributes/point_d_vector.h
+++ b/extern/draco/dracoenc/src/draco/compression/attributes/point_d_vector.h
@@ -42,7 +42,7 @@ class PseudoPointD {
// Specifically copies referenced memory
void swap(PseudoPointD &other) noexcept {
- for (auto dim = 0; dim < dimension_; dim += 1)
+ for (internal_t dim = 0; dim < dimension_; dim += 1)
std::swap(mem_[dim], other.mem_[dim]);
}
diff --git a/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h b/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h
index 3a00bda943c..db835554385 100644
--- a/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h
+++ b/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h
@@ -21,7 +21,9 @@
#include "draco/draco_features.h"
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h"
+#ifdef DRACO_NORMAL_ENCODING_SUPPORTED
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h"
+#endif
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h"
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_decoder.h"
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h"
@@ -82,16 +84,20 @@ struct MeshPredictionSchemeDecoderFactory {
new MeshPredictionSchemeTexCoordsPortableDecoder<
DataTypeT, TransformT, MeshDataT>(attribute, transform,
mesh_data));
- } else if (method == MESH_PREDICTION_GEOMETRIC_NORMAL) {
+ }
+#ifdef DRACO_NORMAL_ENCODING_SUPPORTED
+ else if (method == MESH_PREDICTION_GEOMETRIC_NORMAL) {
return std::unique_ptr<PredictionSchemeDecoder<DataTypeT, TransformT>>(
new MeshPredictionSchemeGeometricNormalDecoder<
DataTypeT, TransformT, MeshDataT>(attribute, transform,
mesh_data));
}
+#endif
return nullptr;
}
};
+#ifdef DRACO_NORMAL_ENCODING_SUPPORTED
// Operator () specialized for normal octahedron transforms. These transforms
// are currently used only by the geometric normal prediction scheme (the
// transform is also used by delta coding, but delta predictor is not
@@ -128,6 +134,7 @@ struct MeshPredictionSchemeDecoderFactory {
return nullptr;
}
};
+#endif
template <class TransformT, class MeshDataT>
std::unique_ptr<PredictionSchemeDecoder<DataTypeT, TransformT>> operator()(
diff --git a/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc b/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc
index 3144bdb9a6b..6b74e571c6d 100644
--- a/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc
+++ b/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc
@@ -32,10 +32,12 @@ PredictionSchemeMethod SelectPredictionMethod(
}
}
if (att->attribute_type() == GeometryAttribute::NORMAL) {
+#ifdef DRACO_NORMAL_ENCODING_SUPPORTED
if (encoder->options()->GetSpeed() < 4) {
// Use geometric normal prediction for speeds 0, 1, 2, 3.
return MESH_PREDICTION_GEOMETRIC_NORMAL;
}
+#endif
return PREDICTION_DIFFERENCE; // default
}
// Handle other attribute types.
diff --git a/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h b/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h
index cde5ba2435f..4cc40010773 100644
--- a/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h
+++ b/extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h
@@ -19,7 +19,9 @@
#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_ENCODER_FACTORY_H_
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h"
+#ifdef DRACO_NORMAL_ENCODING_SUPPORTED
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h"
+#endif
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h"
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h"
#include "draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h"
@@ -49,32 +51,25 @@ struct MeshPredictionSchemeEncoderFactory {
new MeshPredictionSchemeParallelogramEncoder<DataTypeT, TransformT,
MeshDataT>(
attribute, transform, mesh_data));
- } else if (method == MESH_PREDICTION_MULTI_PARALLELOGRAM) {
- return std::unique_ptr<PredictionSchemeEncoder<DataTypeT, TransformT>>(
- new MeshPredictionSchemeMultiParallelogramEncoder<
- DataTypeT, TransformT, MeshDataT>(attribute, transform,
- mesh_data));
} else if (method == MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM) {
return std::unique_ptr<PredictionSchemeEncoder<DataTypeT, TransformT>>(
new MeshPredictionSchemeConstrainedMultiParallelogramEncoder<
DataTypeT, TransformT, MeshDataT>(attribute, transform,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list