58 int att_id)
const override;
60 int att_id)
const override;
67 return corner_table_.get();
72 template <
class TraverserT>
73 std::unique_ptr<PointsSequencer> CreateVertexTraversalSequencer(
85 bool IsTopologySplit(
int encoder_symbol_id,
EdgeFaceName *out_face_edge,
86 int *out_encoder_split_symbol_id) {
87 if (topology_split_data_.size() == 0) {
90 if (topology_split_data_.back().source_symbol_id >
91 static_cast<uint32_t
>(encoder_symbol_id)) {
97 *out_encoder_split_symbol_id = -1;
100 if (topology_split_data_.back().source_symbol_id != encoder_symbol_id) {
104 static_cast<EdgeFaceName>(topology_split_data_.back().source_edge);
105 *out_encoder_split_symbol_id = topology_split_data_.back().split_symbol_id;
107 topology_split_data_.pop_back();
114 int32_t DecodeHoleAndTopologySplitEvents(DecoderBuffer *decoder_buffer);
118#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED
119 bool DecodeAttributeConnectivitiesOnFaceLegacy(
CornerIndex corner);
121 bool DecodeAttributeConnectivitiesOnFace(
CornerIndex corner);
124 bool AssignPointsToCorners(
int num_connectivity_verts);
130 return visited_faces_[corner_table_->Face(corner_id).value()];
134 corner_table_->SetOppositeCorner(corner_0, corner_1);
135 corner_table_->SetOppositeCorner(corner_1, corner_0);
138 MeshEdgebreakerDecoder *decoder_;
140 std::unique_ptr<CornerTable> corner_table_;
149 std::vector<CornerIndex> corner_traversal_stack_;
152 std::vector<int> vertex_traversal_length_;
155 std::vector<TopologySplitEventData> topology_split_data_;
158 std::vector<HoleEventData> hole_event_data_;
161 std::vector<bool> init_face_configurations_;
164 std::vector<CornerIndex> init_corners_;
176 std::vector<bool> visited_faces_;
178 std::vector<bool> visited_verts_;
180 std::vector<bool> is_vert_hole_;
186 int num_new_vertices_;
189 std::unordered_map<int, int> new_to_parent_vertex_map_;
192 int num_encoded_vertices_;
196 std::vector<int32_t> processed_corner_ids_;
201 std::vector<int> processed_connectivity_corners_;
203 MeshAttributeIndicesEncodingData pos_encoding_data_;
206 int pos_data_decoder_id_;
209 struct AttributeData {
210 AttributeData() : decoder_id(-1), is_connectivity_used(true) {}
213 MeshAttributeCornerTable connectivity_data;
216 bool is_connectivity_used;
217 MeshAttributeIndicesEncodingData encoding_data;
219 std::vector<int32_t> attribute_seam_corners;
221 std::vector<AttributeData> attribute_data_;
223 TraversalDecoderT traversal_decoder_;