I used vtk9.0.0 to use egl rendering to add the same actor to two windows, and found that the window that added the actor first could not render the added actor.
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCylinderSource.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include "vtkWindowToImageFilter.h"
#include "vtkPNGWriter.h"
#include "vtkSphereSource.h"
#include <array>
void saveImage(vtkRenderWindow* renderWindow,QString fileName){
vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter =
vtkSmartPointer<vtkWindowToImageFilter>::New();
windowToImageFilter->SetInput(renderWindow);
windowToImageFilter->SetScale(2); //image quality
windowToImageFilter->SetInputBufferTypeToRGBA(); //also record the alpha (transparency) channel
windowToImageFilter->ReadFrontBufferOff(); // read from the back buffer
windowToImageFilter->Update();
vtkSmartPointer<vtkPNGWriter> writer =
vtkSmartPointer<vtkPNGWriter>::New();
writer->SetFileName(fileName.toStdString().c_str());
writer->SetInputConnection(windowToImageFilter->GetOutputPort());
writer->Write();
}
int main(int argc, char *argv[])
{
vtkNew<vtkCylinderSource> cylinder;
cylinder->SetResolution(80);
cylinder->SetHeight(10);
vtkNew<vtkPolyDataMapper> cylinderMapper;
cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
vtkNew<vtkActor> cylinderActor;
cylinderActor->SetMapper(cylinderMapper);
cylinderActor->GetProperty()->SetColor(1.0,0.0,0.0);
vtkNew<vtkSphereSource> highResSphereSource;
highResSphereSource->SetThetaResolution(200);
highResSphereSource->SetPhiResolution(200);
highResSphereSource->SetRadius(2);
highResSphereSource->Update();
vtkNew<vtkPolyDataMapper> highResMapper;
highResMapper->SetInputConnection(highResSphereSource->GetOutputPort());
vtkNew<vtkActor> sphereActor;
sphereActor->SetMapper(highResMapper);
sphereActor->GetProperty()->SetColor(1.0,1.0,0.0);
vtkNew<vtkRenderer> renderer1;
renderer1->AddActor(cylinderActor);
renderer1->AddActor(sphereActor);
renderer1->ResetCamera();
vtkNew<vtkRenderWindow> renderWindow1;
renderWindow1->SetSize(300, 300);
renderWindow1->AddRenderer(renderer1);
renderWindow1->SetWindowName("Cylinder");
renderWindow1->Render();
saveImage(renderWindow1,"image1.png");
vtkNew<vtkActor> cylinderActor2;
cylinderActor2->ShallowCopy(cylinderActor);
vtkNew<vtkActor> sphereActor2;
sphereActor2->ShallowCopy(sphereActor);
vtkNew<vtkRenderer> renderer2;
renderer2->AddActor(cylinderActor2);
renderer2->AddActor(sphereActor2);
renderer2->ResetCamera();
vtkCamera *camera = renderer2->GetActiveCamera();
camera->Elevation(45);
camera->OrthogonalizeViewUp();
camera->Modified();
vtkNew<vtkRenderWindow> renderWindow2;
renderWindow2->SetSize(300, 300);
renderWindow2->AddRenderer(renderer2);
renderWindow2->SetWindowName("Cylinder2");
renderWindow2->Render();
saveImage(renderWindow2,"image2.png");
renderer1->GetActiveCamera()->Elevation(30);
renderWindow1->Render();
saveImage(renderWindow1,"image3.png");
renderer2->GetActiveCamera()->Elevation(-15);
renderWindow2->Render();
saveImage(renderWindow2,"image4.png");
return 0;
}