egl rendering problem

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;
}