Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • VTK VTK
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 737
    • Issues 737
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 209
    • Merge requests 209
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • VTK
  • VTKVTK
  • Issues
  • #17954

Closed
Open
Created Jul 10, 2020 by Bingliang@bingliang-zh

EGL Segmentation fault in VTK-9.0.1

I am trying to do some off-screen rendering stuff. OSMesa is working great, but EGL is not.

Got segmentation fault when I was trying to do renderWindow->render().

Gdb output

Reading symbols from build/OffScreenRendering...
(gdb) run
Starting program: /home/XXX/vtkExamples/OffScreenRenderingEgl/build/OffScreenRendering 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff79d0664 in vtkOpenGLCamera::Render (this=0x5555555a8a00, ren=0x5555555a3dc0)
    at /home/XXX/VTK/VTK-9.0.1/Rendering/OpenGL2/vtkOpenGLCamera.cxx:55
55        vtkOpenGLState* ostate = win->GetState();
(gdb) 

valgrind output

==37346== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
==37346== 
==37346== 1 errors in context 1 of 1:
==37346== Invalid read of size 8
==37346==    at 0x4D3C664: vtkOpenGLCamera::Render(vtkRenderer*) (vtkOpenGLCamera.cxx:55)
==37346==    by 0x521F9CC: vtkRenderer::UpdateCamera() (vtkRenderer.cxx:485)
==37346==    by 0x4E041A0: vtkOpenGLRenderer::DeviceRender() (vtkOpenGLRenderer.cxx:255)
==37346==    by 0x521F1AB: vtkRenderer::Render() (vtkRenderer.cxx:377)
==37346==    by 0x52348CD: vtkRendererCollection::Render() (vtkRendererCollection.cxx:51)
==37346==    by 0x5201C8D: vtkRenderWindow::DoStereoRender() (vtkRenderWindow.cxx:337)
==37346==    by 0x5201A4A: vtkRenderWindow::Render() (vtkRenderWindow.cxx:297)
==37346==    by 0x10B51D: main (OffScreenRendering.cxx:35)
==37346==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==37346== 

These are my codes.

compile-EGL.sh

if [ ! -d "VTK-9.0.1" ]; then
    wget -c https://www.vtk.org/files/release/9.0/VTK-9.0.1.tar.gz -O - | tar -xz
fi
cd VTK-9.0.1
if [ ! -d "build" ]; then
    mkdir build
fi
cd build

cmake .. \
    -D"VTK_OPENGL_HAS_EGL:BOOL=ON" \
    -D"VTK_OPENGL_HAS_OSMESA:BOOL=OFF" \
    -D"VTK_USE_X:BOOL=OFF"

CMakeLists.txt

cmake_minimum_required(VERSION 3.3 FATAL_ERROR)

project(OffScreenRendering)

set(CMAKE_BUILD_TYPE Debug)

find_package(VTK COMPONENTS 
  vtkCommonCore
  vtkCommonDataModel
  vtkFiltersSources
  vtkIOImage
  vtkInteractionStyle
  vtkRenderingCore
  vtkRenderingFreeType
  vtkRenderingOpenGL2 QUIET)
if (NOT VTK_FOUND)
  message("Skipping OffScreenRendering: ${VTK_NOT_FOUND_MESSAGE}")
  return ()
endif()
message (STATUS "VTK_VERSION: ${VTK_VERSION}")
if (VTK_VERSION VERSION_LESS "8.90.0")
  # old system
  include(${VTK_USE_FILE})
  add_executable(OffScreenRendering MACOSX_BUNDLE OffScreenRendering.cxx )
  target_link_libraries(OffScreenRendering PRIVATE ${VTK_LIBRARIES})
else ()
  # include all components
  add_executable(OffScreenRendering MACOSX_BUNDLE OffScreenRendering.cxx )
  target_link_libraries(OffScreenRendering PRIVATE ${VTK_LIBRARIES})
  # vtk_module_autoinit is needed
  vtk_module_autoinit(
    TARGETS OffScreenRendering
    MODULES ${VTK_LIBRARIES}
    )
endif () 

OffScreenRendering.cxx

// These 2 lines are needed due to:
// http://www.vtk.org/Wiki/VTK/VTK_6_Migration/Factories_now_require_defines
#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)
// #define VTK_USE_OFFSCREEN_EGL​
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkWindowToImageFilter.h>
#include <vtkPNGWriter.h>
#include <vtkGraphicsFactory.h>

int main ()
{
    //sphere 1
    vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();

    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(sphereSource->GetOutputPort());


    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    // a renderer and render window
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    // renderWindow->SetOffScreenRendering(1);
    renderer->AddActor(actor);
    renderWindow->AddRenderer(renderer);
    renderWindow->Render();

    vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter =
        vtkSmartPointer<vtkWindowToImageFilter>::New();
    windowToImageFilter->SetInputBufferTypeToRGBA();
    windowToImageFilter->SetInput(renderWindow);
    windowToImageFilter->Update();

    vtkSmartPointer<vtkPNGWriter> writer = vtkSmartPointer<vtkPNGWriter>::New();
    writer->SetFileName("sphere.png");
    writer->SetInputConnection(windowToImageFilter->GetOutputPort());
    writer->Write();

    return 0;
}

My system setup: Intel i5-8500 with UHD 630, Ubuntu 20.04 LTS.

Opengl versions: glxinfo | grep "version"

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
    Max core profile version: 4.6
    Max compat profile version: 4.6
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.0.8
OpenGL core profile shading language version string: 4.60
OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.0.8
OpenGL shading language version string: 4.60
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.0.8
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
    GL_EXT_shader_implicit_conversions, GL_EXT_shader_integer_mix,
Assignee
Assign to
Time tracking