Differential D9642 Diff 31697 extern/draco/draco/src/draco/compression/mesh/traverser/mesh_traversal_sequencer.h
Changeset View
Changeset View
Standalone View
Standalone View
extern/draco/draco/src/draco/compression/mesh/traverser/mesh_traversal_sequencer.h
- This file was moved from extern/draco/dracoenc/src/draco/compression/mesh/traverser/mesh_traversal_sequencer.h.
| Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | bool UpdatePointToAttributeIndexMapping(PointAttribute *attribute) override { | ||||
| const size_t num_faces = mesh_->num_faces(); | const size_t num_faces = mesh_->num_faces(); | ||||
| const size_t num_points = mesh_->num_points(); | const size_t num_points = mesh_->num_points(); | ||||
| for (FaceIndex f(0); f < static_cast<uint32_t>(num_faces); ++f) { | for (FaceIndex f(0); f < static_cast<uint32_t>(num_faces); ++f) { | ||||
| const auto &face = mesh_->face(f); | const auto &face = mesh_->face(f); | ||||
| for (int p = 0; p < 3; ++p) { | for (int p = 0; p < 3; ++p) { | ||||
| const PointIndex point_id = face[p]; | const PointIndex point_id = face[p]; | ||||
| const VertexIndex vert_id = | const VertexIndex vert_id = | ||||
| corner_table->Vertex(CornerIndex(3 * f.value() + p)); | corner_table->Vertex(CornerIndex(3 * f.value() + p)); | ||||
| if (vert_id == kInvalidVertexIndex) | if (vert_id == kInvalidVertexIndex) { | ||||
| return false; | return false; | ||||
| } | |||||
| const AttributeValueIndex att_entry_id( | const AttributeValueIndex att_entry_id( | ||||
| encoding_data_ | encoding_data_ | ||||
| ->vertex_to_encoded_attribute_value_index_map[vert_id.value()]); | ->vertex_to_encoded_attribute_value_index_map[vert_id.value()]); | ||||
| if (att_entry_id.value() >= num_points) { | if (point_id >= num_points || att_entry_id.value() >= num_points) { | ||||
| // There cannot be more attribute values than the number of points. | // There cannot be more attribute values than the number of points. | ||||
| return false; | return false; | ||||
| } | } | ||||
| attribute->SetPointMapEntry(point_id, att_entry_id); | attribute->SetPointMapEntry(point_id, att_entry_id); | ||||
| } | } | ||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||
| protected: | protected: | ||||
| bool GenerateSequenceInternal() override { | bool GenerateSequenceInternal() override { | ||||
| // Preallocate memory for storing point indices. We expect the number of | // Preallocate memory for storing point indices. We expect the number of | ||||
| // points to be the same as the number of corner table vertices. | // points to be the same as the number of corner table vertices. | ||||
| out_point_ids()->reserve(traverser_.corner_table()->num_vertices()); | out_point_ids()->reserve(traverser_.corner_table()->num_vertices()); | ||||
| traverser_.OnTraversalStart(); | traverser_.OnTraversalStart(); | ||||
| if (corner_order_) { | if (corner_order_) { | ||||
| for (uint32_t i = 0; i < corner_order_->size(); ++i) { | for (uint32_t i = 0; i < corner_order_->size(); ++i) { | ||||
| if (!ProcessCorner(corner_order_->at(i))) | if (!ProcessCorner(corner_order_->at(i))) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | |||||
| } else { | } else { | ||||
| const int32_t num_faces = traverser_.corner_table()->num_faces(); | const int32_t num_faces = traverser_.corner_table()->num_faces(); | ||||
| for (int i = 0; i < num_faces; ++i) { | for (int i = 0; i < num_faces; ++i) { | ||||
| if (!ProcessCorner(CornerIndex(3 * i))) | if (!ProcessCorner(CornerIndex(3 * i))) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| traverser_.OnTraversalEnd(); | traverser_.OnTraversalEnd(); | ||||
| return true; | return true; | ||||
| } | } | ||||
| private: | private: | ||||
| bool ProcessCorner(CornerIndex corner_id) { | bool ProcessCorner(CornerIndex corner_id) { | ||||
| return traverser_.TraverseFromCorner(corner_id); | return traverser_.TraverseFromCorner(corner_id); | ||||
| } | } | ||||
| Show All 10 Lines | |||||