@@ -99,7 +99,8 @@ Status PlyDecoder::DecodeInternal() {
9999 return OkStatus ();
100100}
101101
102- Status PlyDecoder::DecodeFaceData (const PlyElement *face_element, const int num_vertices) {
102+ Status PlyDecoder::DecodeFaceData (const PlyElement *face_element,
103+ const int num_vertices) {
103104 // We accept point clouds now.
104105 if (face_element == nullptr ) {
105106 return Status (Status::INVALID_PARAMETER, " face_element is null" );
@@ -142,7 +143,8 @@ Status PlyDecoder::DecodeFaceData(const PlyElement *face_element, const int num_
142143 }
143144 out_mesh_->SetNumFaces (face_index.value ());
144145
145- DecodeFaceTexCoordData (face_element, vertex_indices, num_vertices);
146+ DRACO_RETURN_IF_ERROR (
147+ DecodeFaceTexCoordData (face_element, vertex_indices, num_vertices));
146148
147149 return OkStatus ();
148150}
@@ -172,32 +174,35 @@ Status PlyDecoder::DecodeFaceTexCoordData(
172174
173175 // Allocate attribute for texture coordinates.
174176 GeometryAttribute uv_attr;
175- uv_attr.Init (GeometryAttribute::TEX_COORD, nullptr , 2 , DT_FLOAT32, false , sizeof (float ) * 2 , 0 );
176- const int uv_att_id = out_point_cloud_->AddAttribute (uv_attr, true , num_vertices);
177+ uv_attr.Init (GeometryAttribute::TEX_COORD, nullptr , 2 , DT_FLOAT32, false ,
178+ sizeof (float ) * 2 , 0 );
179+ const int uv_att_id =
180+ out_point_cloud_->AddAttribute (uv_attr, true , num_vertices);
177181
178- const int64_t num_polygons = face_element->num_entries ();
182+ const int num_polygons = face_element->num_entries ();
179183 PlyPropertyReader<float > uv_reader (texture_coordinates);
180184 PlyPropertyReader<PointIndex::ValueType> vertex_index_reader (vertex_indices);
181185
182- for (int64_t face_index = 0 ; face_index < num_polygons; ++face_index ) {
183- const int64_t vertex_list_offset = vertex_indices->GetListEntryOffset (face_index );
184- const int64_t vertex_list_size = vertex_indices->GetListEntryNumValues (face_index );
186+ for (int i = 0 ; i < num_polygons; ++i ) {
187+ const int vertex_list_offset = vertex_indices->GetListEntryOffset (i );
188+ const int vertex_list_size = vertex_indices->GetListEntryNumValues (i );
185189
186- const int64_t uv_list_offset = texture_coordinates->GetListEntryOffset (face_index );
187- const int64_t uv_list_size = texture_coordinates->GetListEntryNumValues (face_index );
190+ const int uv_list_offset = texture_coordinates->GetListEntryOffset (i );
191+ const int uv_list_size = texture_coordinates->GetListEntryNumValues (i );
188192
189- if (uv_list_size < 2 * vertex_list_size) {
190- continue ; // Skip invalid uv list. Must have two texture coords per vertex.
191- }
193+ if (uv_list_size < 2 * vertex_list_size) {
194+ continue ; // Skip invalid uv list. Need two texture coords per vertex.
195+ }
192196
193- for (int64_t i = 0 ; i < vertex_list_size; ++i) {
194- uint32_t vertex_index = vertex_index_reader.ReadValue (static_cast <int >(vertex_list_offset + i));
195- float uv_value[2 ];
196- uv_value[0 ] = uv_reader.ReadValue (static_cast <int >(uv_list_offset + i * 2 ));
197- uv_value[1 ] = uv_reader.ReadValue (static_cast <int >(uv_list_offset + i * 2 + 1 ));
198- out_point_cloud_->attribute (uv_att_id)->SetAttributeValue (
199- AttributeValueIndex (vertex_index), uv_value);
200- }
197+ for (int j = 0 ; j < vertex_list_size; ++j) {
198+ uint32_t vertex_index =
199+ vertex_index_reader.ReadValue (vertex_list_offset + j);
200+ float uv_value[2 ];
201+ uv_value[0 ] = uv_reader.ReadValue (uv_list_offset + j * 2 );
202+ uv_value[1 ] = uv_reader.ReadValue (uv_list_offset + j * 2 + 1 );
203+ out_point_cloud_->attribute (uv_att_id)->SetAttributeValue (
204+ AttributeValueIndex (vertex_index), uv_value);
205+ }
201206 }
202207
203208 return OkStatus ();
0 commit comments