vtkTextMapper update issue
This issue was created automatically from an original Mantis Issue. Further discussion may take place here.
When a previously rendered vtkTextMapper (not vtkOpenGLFreeTypeTextMapper) has its text or textproperty changed, and is rendered again, the result is sometimes not updated, as witnessed by the following code (assuming vtkOpenGLFreeTypeTextMapper is not overriding vtkTextMapper::New, vtkLabeledDataMapper uses a vtkTextMapper).
vtkNew<vtkRenderWindow> window;
vtkNew<vtkRenderer> renderer;
window->AddRenderer(renderer.GetPointer());
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow(window.GetPointer());
window->SetSize(600, 600);
iren->Initialize();
vtkNew<vtkLabeledDataMapper> lmap;
vtkNew<vtkActor2D> actor;
actor->SetMapper(lmap.GetPointer());
renderer->AddActor(actor.GetPointer());
vtkNew<vtkPoints> pts;
pts->InsertNextPoint(0, 0, 0);
vtkNew<vtkStringArray> s1;
s1->InsertNextValue("E");
s1->SetName("S");
vtkNew<vtkPolyData> p1;
p1->SetPoints(pts.GetPointer());
p1->GetPointData()->AddArray(s1.GetPointer());
lmap->SetInputData(p1.GetPointer());
lmap->SetLabelModeToLabelFieldData();
vtkNew<vtkTextProperty> prop;
prop->SetFontFamilyToArial();
prop->SetFontSize(14);
lmap->SetLabelTextProperty(prop.GetPointer());
lmap->SetFieldDataName("S");
iren->Initialize();
renderer->ResetCamera();
renderer->Render();
lmap->GetLabelTextProperty()->SetColor(1, 0, 0);
renderer->Render();
iren->Start();
// the E is still white instead of becoming red
The problem is that vtkTextRenderer::RenderString called at vtkTextMapper.cxx:536 does not modify the mtime of the image when it does not reallocate it. As a result, the texture does not update itself before rendering, resulting in the previous text being displayed.
I believe vtkTextRenderer::RenderString should call image->Modified(), or, at least, vtkTextMapper::UpdateImage should do it itself.