Rendering degenerate triangle strips can cause a crash
Some of a customer's polydatas end up with a single point and a triangle strip. Polydata with 1 point will pass the first test in vtkCompositeMapperHelper2::AppendOneBufferObject
, which returns if poly->GetNumberOfPoints()
is 0. A polydata can then squeeze through to vtkOpenGLIndexBufferObject::AppendStripIndexBuffer
and underflow the calculation of triCount
.
vtkSmartPointer<vtkPolyData> poly = vtkSmartPointer<vtkPolyData>::New();
vtkSmartPointer<vtkCellArray> triangleStrips = vtkSmartPointer<vtkCellArray>::New();
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkTriangleStrip> strip = vtkSmartPointer<vtkTriangleStrip>::New();
points->InsertNextPoint(0.0, 0.0, 0.0);
strip->GetPointIds()->InsertId(0, 0);
triangleStrips->InsertNextCell(strip);
poly->SetPoints(points);
poly->SetStrips(triangleStrips);
vtkSmartPointer<vtkXMLPolyDataWriter> writer = vtkSmartPointer<vtkXMLPolyDataWriter>::New();
writer->SetInputData(poly);
writer->SetFileName("/your/path/to/bad_poly.vtp");
writer->Write();
fyi: @chart3388