<div dir="ltr"><div><div><div><div><div><div><div>Hi all,<br><br></div>In exploring different deployment options, I'm now trying to create an AppImage of a VTK+Qt application. For those who don't know, AppImage is a packaging format where the application, including (almost) all of its dependencies are put into a self-extracting ISO image called an AppImage.<br><br></div>Doing this takes quite a bit of manual work, but if you do things correctly and build the image on a good base system (I'm using CentOS 6), the image should run on a multitude of distros.<br><br></div>I've had some success: The resulting image runs on e.g. Ubuntu Xenial.<br><br></div>I'm now trying it on my Arch Linux laptop (not a common/easy target for AppImages, but I'd like to make it work since I run it personally), and get:<br><br>ERROR: In /tmp/VTK-7.0.0/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 533<br>vtkXOpenGLRenderWindow (0x1e48140): GLEW could not be initialized.<br><br></div>This is due to a glewInit() call failing during initialization of the render window, and I've debugged it to the underlying call to glGetString(GL_VERSION) in VTK's forked GLEW library returning NULL.<br><br></div><div>Does anyone have an idea why this might happen? The VTK I'm using here is configured as follows:<br><br>cmake3 \<br>    -DCMAKE_INSTALL_PREFIX=/usr \<br>    -DVTK_Group_Qt=ON \<br>    -DVTK_QT_VERSION=5 \<br>    -DVTK_Group_Imaging=ON \<br>    -DVTK_Group_Views=ON \<br>    -DVTK_Group_MPI=OFF \<br>    -DVTK_Group_Tk=OFF \<br>    -DVTK_Group_Web=OFF \<br>    -DBUILD_TESTING=OFF \<br>    -DVTK_USE_SYSTEM_LIBRARIES=ON \<br>    -DVTK_USE_SYSTEM_LIBPROJ4=OFF \<br>    -DCMAKE_BUILD_TYPE=Debug \<br>    ..<br><br></div><div>And it uses the OpenGL2 backend.<br><br></div><div>It was built inside a CentOS 6 Docker container on a Kubuntu 16.04 host with HD 4400 Intel graphics adapter. The target system is an older laptop with up-to-date Arch Linux and a weaker HD 3000 Intel graphics adapter.<br></div><div><br></div>Now, packaging apps that use OpenGL is a bit tricky, because you can't bundle e.g. libX11, libGL and some other libraries that are dependant on the user's graphics adapter/environment.<br><br></div><div>The libraries that I've chosen to _not_ bundle are:<br><br>    libz.so.1 <br>    libm.so.6 <br>    libSM.so.6 <br>    libICE.so.6 <br>    libX11.so.6 <br>    libXext.so.6 <br>    libXt.so.6 <br>    libstdc++.so.6 <br>    libgcc_s.so.1 <br>    libc.so.6 <br>    libpthread.so.0 <br>    librt.so.1 <br>    libGL.so.1 <br>    libdl.so.2 <br>    libuuid.so.1 <br>    libxcb.so.1 <br>    libxcb-dri3.so.0 <br>    libxcb-present.so.0 <br>    libxcb-randr.so.0 <br>    libxcb-xfixes.so.0 <br>    libxcb-render.so.0 <br>    libxcb-shape.so.0 <br>    libxcb-sync.so.1 <br>    libxshmfence.so.1 <br>    libglapi.so.0 <br>    libXdamage.so.1 <br>    libXfixes.so.3 <br>    libX11-xcb.so.1 <br>    libxcb-glx.so.0 <br>    libxcb-dri2.so.0 <br>    libXxf86vm.so.1 <br>    libdrm.so.2 <br>    libXau.so.6 <br>    libXdmcp.so.6<br><br></div><div>This may be a little too liberal, and it could be that I should be bundling some of these. But it seems to work fine since the AppImage runs without problem on Kubuntu 16.04.<br><br></div><div>The application also runs fine if I build VTK and the application "normally" on the Arch host and run it (using OpenGL2 backend), so the graphics adapter should be capable enough. It's just when I try to run the CentOS 6-built AppImage on the Arch host that it fails.<br><br></div><div>The application essentially just creates a QVTKWidget and renders a volume into its rendering window.<br></div><div><br></div><div>I saw that one (perhaps likely?) reason for glGetString(GL_VERSION) returning NULL is that initialization of the GL context failed (or wasn't fully done yet). If this is the case, does anyone know where I can debug this further in VTK? Where is the OpenGL context in VTK set up when using QVTKWidget + OpenGL2 backend?<br><br></div><div>Finally: Has anyone else tried packaging VTK applications as AppImages?<br><br></div><div>I know ParaView is provided as a prebuilt Linux binary with VTK bundled, so I can imagine the ParaView folks has ran into some issues like this?<br><br></div><div>Thanks in advance for any advice.<br><br></div><div>Elvis<br></div></div>