# Atempt to render offscreen using vtkEGLRenderWindow

**URL:** <https://discourse.vtk.org/t/atempt-to-render-offscreen-using-vtkeglrenderwindow/12956>\
**Category:** Development\
**Created:** [December 21, 2023, 10:26pm UTC](https://discourse.vtk.org/t/atempt-to-render-offscreen-using-vtkeglrenderwindow/12956 "2023-12-21T22:26:21Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rafael\_Scatena](https://discourse.vtk.org/user_avatar/discourse.vtk.org/rafael_scatena/32/7820_2.png) [@Rafael\_Scatena](https://discourse.vtk.org/u/Rafael_Scatena)\
**Post date:** [December 21, 2023, 10:26pm UTC](https://discourse.vtk.org/t/atempt-to-render-offscreen-using-vtkeglrenderwindow/12956/1 "2023-12-21T22:26:21Z")

</div>

I am trying to render offscreen with EGL but I keep geting segmentation fault.

Thank you,

```
  std::cerr << "Colours" << std::endl;	              
        // Setup offscreen rendering
    vtkNew<vtkNamedColors> colors;
  std::cerr << "Pre-GraphicsFac Ok" << std::endl;	  
    vtkNew<vtkGraphicsFactory> graphics_factory;
    graphics_factory->SetOffScreenOnlyMode(1);
    graphics_factory->SetUseMesaClasses(1);
  std::cerr << "Pos-GraphicsFac Ok" << std::endl;	  	    

      // Create a sphere
   vtkNew<vtkSphereSource> sphereSource;
    sphereSource->SetThetaResolution(75);
    sphereSource->SetPhiResolution(75);

 // vtkNew<vtkTexture> texture;
 // texture->SetInputConnection(sphereSource->GetOutputPort());
  
  std::cerr << "Sphere Created Ok" << std::endl;	  
  // Create a mapper and actor
  vtkNew<vtkPolyDataMapper> mapper;
  mapper->SetInputConnection(sphereSource->GetOutputPort());

  // Apply the texture
  vtkNew<vtkTexture> texture;
  texture->SetInputConnection(sphereSource->GetOutputPort());

  vtkNew<vtkActor> actor;
  actor->SetMapper(mapper);
  actor->GetProperty()->SetColor(colors->GetColor3d("White").GetData());

  
  actor->SetMapper(mapper);
  actor->SetTexture(texture);

  // A renderer and render window
  vtkNew<vtkOpenGLRenderer> renderer;

  
  vtkNew<vtkEGLRenderWindow> renderWindow;
  std::cerr << "Number of Devices: "<< renderWindow->GetNumberOfDevices() << std::endl;	  
  

  renderWindow->MakeCurrent();
  renderWindow->SetOffScreenRendering(1);
  renderWindow->OffScreenRenderingOn();
  renderWindow->SetShowWindow(false);
  renderWindow->WindowInitialize();
  renderWindow->MakeCurrent();

  renderWindow->AddRenderer(renderer);
  renderer->AddActor(actor);
  renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());
  std::cerr << "Render Created Ok" << std::endl;
  
  renderWindow->Render();

  std::cerr << "Render Window Created Ok" << std::endl;
  
  // Add the actors to the scene
  
  // Perform offscreen rendering

  std::cerr << "Actor Added Ok" << std::endl;

  std::cerr << "Render Ok" << std::endl;

  vtkNew<vtkWindowToImageFilter> windowToImageFilter;
  windowToImageFilter->SetInput(renderWindow);
  windowToImageFilter->Update();
  
  std::cerr << "Render-Window to image Ok" << std::endl;
  

  vtkNew<vtkPNGWriter> writer;
  writer->SetFileName("/home/3484681/Área de Trabalho/PRISMAMESH/createmesh/screenshot.png");
  writer->SetInputConnection(windowToImageFilter->GetOutputPort());
  writer->Write();

```

---

<div class="post-metadata">

**Author:** ![Rafael\_Scatena](https://discourse.vtk.org/user_avatar/discourse.vtk.org/rafael_scatena/32/7820_2.png) [@Rafael\_Scatena](https://discourse.vtk.org/u/Rafael_Scatena)\
**Post date:** [December 27, 2023, 11:53pm UTC](https://discourse.vtk.org/t/atempt-to-render-offscreen-using-vtkeglrenderwindow/12956/2 "2023-12-27T23:53:08Z")

</div>

EGL didn’t initialize correctly with eglinfo

 ![image](https://discourse.vtk.org/uploads/default/original/2X/f/f4349533801ccfd9ebb0187be70e3d8721771f13.png)

---

<div class="post-metadata">

**Author:** ![Rafael\_Scatena](https://discourse.vtk.org/user_avatar/discourse.vtk.org/rafael_scatena/32/7820_2.png) [@Rafael\_Scatena](https://discourse.vtk.org/u/Rafael_Scatena)\
**Post date:** [January 11, 2024, 10:33pm UTC](https://discourse.vtk.org/t/atempt-to-render-offscreen-using-vtkeglrenderwindow/12956/3 "2024-01-11T22:33:49Z")

</div>

This worked:

```
      #ifdef ENABLE_OFFSCREEN_RENDERING
       
    	
  std::cerr << "Colours" << std::endl;	              
      // Setup offscreen rendering
  vtkNew<vtkNamedColors> colors;
    

  // Create a sphere
  vtkNew<vtkSphereSource> sphereSource;
  sphereSource->SetThetaResolution(100);
  sphereSource->SetPhiResolution(100);

  
  std::cerr << "Sphere Created Ok" << std::endl;	  
  // Create a mapper and actor
  vtkNew<vtkPolyDataMapper> mapper;
  mapper->SetInputConnection(sphereSource->GetOutputPort());

  vtkNew<vtkActor> actor;
  actor->SetMapper(mapper);
  actor->GetProperty()->SetColor(colors->GetColor3d("White").GetData());
// actor->SetTexture(texture);

  // A renderer and render window
  vtkNew<vtkRenderer> renderer;
  renderer->AddActor(actor);
  renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());
  
  
  vtkNew<vtkEGLRenderWindow> renderWindow;
  std::cerr << "Number of Devices: "<< renderWindow->GetNumberOfDevices() << std::endl;	

 for (int i = 0; i < renderWindow->GetNumberOfDevices(); ++i) {
    std::cerr << "Device " << i << ": " << renderWindow->GetDeviceIndex() << std::endl;
}
int numberOfDevices = renderWindow->GetNumberOfDevices();

// Ensure the device index is within a valid range
int desiredDeviceIndex = 3; // Use the index that corresponds to your Quadro P5000
    
    	vtkNew<vtkRenderWindowInteractor>renderWindowInteractor;
  renderWindowInteractor->SetRenderWindow(renderWindow);

    renderWindow->SetDeviceIndex(desiredDeviceIndex);
    renderWindow->OffScreenRenderingOn();
    renderWindow->SetShowWindow(false);
    renderWindow->WindowInitialize();
    renderWindow->AddRenderer(renderer);
    renderWindow->SetSize(640, 480);
    renderWindow->SetWindowName("EarthSource2");
    renderWindow->Render();

  std::cerr << "Render Created Ok" << std::endl;

  
  // Add the actors to the scene
  
  // Perform offscreen rendering

  std::cerr << "Actor Added Ok" << std::endl;

  std::cerr << "Render Ok" << std::endl;

  vtkNew<vtkWindowToImageFilter> windowToImageFilter;
  windowToImageFilter->SetInput(renderWindow);
  windowToImageFilter->Update();
  
  std::cerr << "Render-Window to image Ok" << std::endl;

  vtkNew<vtkPNGWriter> writer;
  writer->SetFileName("/home/3484681/Área de Trabalho/PRISMAMESH/createmesh/screenshot.png");
  writer->SetInputConnection(windowToImageFilter->GetOutputPort());
  writer->Write();
  
  std::cerr << "Write Ok" << std::endl;
  
  #endif

```

![screenshot](https://discourse.vtk.org/uploads/default/original/2X/4/4c46ec5fa5d64a1dfd09a1d0cc544bc683f60991.png)
