15#ifndef DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_ENCODER_H_
16#define DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_ENCODER_H_
34 : encoder_impl_(nullptr),
35 attribute_connectivity_encoders_(nullptr),
36 num_attribute_data_(0) {}
38 encoder_impl_ = encoder;
48 start_face_encoder_.StartEncoding();
49 if (num_attribute_data_ > 0) {
52 attribute_connectivity_encoders_ = std::unique_ptr<BinaryEncoder[]>(
54 for (
int i = 0; i < num_attribute_data_; ++i) {
55 attribute_connectivity_encoders_[i].StartEncoding();
62 start_face_encoder_.EncodeBit(interior);
72 symbols_.push_back(symbol);
79 attribute_connectivity_encoders_[attribute].EncodeBit(is_seam ? 1 : 0);
99 traversal_buffer_.StartBitEncoding(
100 encoder_impl_->GetEncoder()->mesh()->num_faces() * 3,
true);
101 for (
int i =
static_cast<int>(symbols_.size() - 1); i >= 0; --i) {
102 traversal_buffer_.EncodeLeastSignificantBits32(
105 traversal_buffer_.EndBitEncoding();
109 start_face_encoder_.EndEncoding(&traversal_buffer_);
113 if (attribute_connectivity_encoders_ !=
nullptr) {
114 for (
int i = 0; i < num_attribute_data_; ++i) {
115 attribute_connectivity_encoders_[i].EndEncoding(&traversal_buffer_);
122 return encoder_impl_;
130 std::vector<EdgebreakerTopologyBitPattern> symbols_;
133 std::unique_ptr<BinaryEncoder[]> attribute_connectivity_encoders_;
134 int num_attribute_data_;
Definition encoder_buffer.h:29
Definition mesh_edgebreaker_encoder_impl_interface.h:33
const EncoderBuffer & buffer() const
Definition mesh_edgebreaker_traversal_encoder.h:92
void Done()
Definition mesh_edgebreaker_traversal_encoder.h:83
void SetNumAttributeData(int num_data)
Definition mesh_edgebreaker_traversal_encoder.h:44
void Start()
Definition mesh_edgebreaker_traversal_encoder.h:47
EncoderBuffer * GetOutputBuffer()
Definition mesh_edgebreaker_traversal_encoder.h:120
const MeshEdgebreakerEncoderImplInterface * encoder_impl() const
Definition mesh_edgebreaker_traversal_encoder.h:121
MeshEdgebreakerTraversalEncoder()
Definition mesh_edgebreaker_traversal_encoder.h:33
void EncodeStartFaces()
Definition mesh_edgebreaker_traversal_encoder.h:108
void EncodeAttributeSeam(int attribute, bool is_seam)
Definition mesh_edgebreaker_traversal_encoder.h:78
int NumEncodedSymbols() const
Definition mesh_edgebreaker_traversal_encoder.h:90
bool Init(MeshEdgebreakerEncoderImplInterface *encoder)
Definition mesh_edgebreaker_traversal_encoder.h:37
void EncodeSymbol(EdgebreakerTopologyBitPattern symbol)
Definition mesh_edgebreaker_traversal_encoder.h:70
void EncodeStartFaceConfiguration(bool interior)
Definition mesh_edgebreaker_traversal_encoder.h:61
void NewCornerReached(CornerIndex)
Definition mesh_edgebreaker_traversal_encoder.h:67
void EncodeTraversalSymbols()
Definition mesh_edgebreaker_traversal_encoder.h:95
void EncodeAttributeSeams()
Definition mesh_edgebreaker_traversal_encoder.h:112
Definition rans_bit_encoder.h:28
Definition attribute_octahedron_transform.cc:21
constexpr int32_t edge_breaker_topology_bit_pattern_length[]
Definition mesh_edgebreaker_shared.h:78
RAnsBitEncoder BinaryEncoder
Definition mesh_edgebreaker_traversal_encoder.h:25
CornerIndex CornerIndex
Definition mesh_edgebreaker_encoder_impl.cc:35
EdgebreakerTopologyBitPattern
Definition mesh_edgebreaker_shared.h:53