Modifying points of shared polydata fails to update mapper
When a polydata is shared by (at least) two filters, and the underlying points are modified after the first rendering, the rendering is not updated. It seems that the issue is due to the caching mechanism of the VBOs.
Example code to reproduce the error:
vtkSmartPointer<vtkActor> linesActor = vtkSmartPointer<vtkActor>::New();
vtkSmartPointer<vtkActor> vertsActor = vtkSmartPointer<vtkActor>::New();
vtkSmartPointer<vtkPolyData> data = vtkSmartPointer<vtkPolyData>::New();
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
data->SetPoints(points);
data->GetPoints()->InsertNextPoint(0, 0, 0);
data->GetPoints()->InsertNextPoint(1, 0, 0);
data->GetPoints()->InsertNextPoint(0, 1, 0);
vtkSmartPointer<vtkLine> line = vtkSmartPointer<vtkLine>::New();
line->GetPointIds()->SetId(0, 0);
line->GetPointIds()->SetId(1, 1);
vtkSmartPointer<vtkCellArray> cella1 = vtkSmartPointer<vtkCellArray>::New();
data->SetLines(cella1);
data->GetLines()->InsertNextCell(line);
vtkSmartPointer<vtkPolyDataMapper> linesMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
linesMapper->SetInputData(data);
vtkSmartPointer<vtkVertexGlyphFilter> filter = vtkSmartPointer<vtkVertexGlyphFilter>::New();
filter->SetInputData(data);
vtkSmartPointer<vtkPolyDataMapper> vertsMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vertsMapper->SetInputConnection(filter->GetOutputPort());
linesActor->SetMapper(linesMapper);
vertsActor->SetMapper(vertsMapper);
vertsActor->GetProperty()->SetPointSize(4);
vertsActor->GetProperty()->SetColor(0, 1, 0);
//Create a renderer, render window, and interactor
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
//Add the actors to the scene
renderer->AddActor(linesActor);
renderer->AddActor(vertsActor);
renderWindow->Render();
// Modify the point
data->GetPoints()->SetPoint(1, 1, 1, 0);
data->Modified();
renderWindow->Render();
renderWindowInteractor->Start();