Problem with compilation of project generator and examples on Ubuntu 14?

Hi all,

I’m using this:

$ lsb_release -a
Distributor ID:    Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:    trusty

$ uname -a
Linux mypc 3.19.0-26-generic #28~14.04.1-Ubuntu SMP Wed Aug 12 14:12:35 UTC 2015 i686 i686 i686 GNU/Linux

I got openFrameworks via github; I don’t use CodeBlocks etc, so I thought I’d be able to compile the examples directly from the command line. My procedure was approx like this:

$ git submodule add https://github.com/openframeworks/openFrameworks.git # instead of git clone 
$ cd openFrameworks/
$ git submodule init # Submodule 'apps/projectGenerator'
$ git submodule update

The currently checked out versions are:

openFrameworks$ git log -1
commit bb4ab7804681d7dd5952561b233f24e39a7166c4
openFrameworks$ cd apps/projectGenerator
projectGenerator$ git log -1
commit cf3ec11932b2c3d91ac7b082391d16764ae03fd6

Then I did:

$ cd /.../openFrameworks/scripts/linux/ubuntu
$ ./install_dependencies.sh
$ cd /.../openFrameworks/scripts/linux/
$ ./compileOF.sh
$ ./compilePG.sh    # to compile the project generator

This compilation process apparently finished OK, because I got:

GUI project generator was correctly installed in /…/openFrameworks/projectGenerator
Command line project generator was correctly installed and will work once the
terminal is restarted. To get more help run projectGenerator --help

Now, when I call this particular executable, I get an error:

$ /.../openFrameworks/projectGenerator/projectGenerator
[ error ] ofAppGLFWWindow: 65544: GLX: Failed to create context: GLXBadFBConfig
[ error ] ofAppGLFWWindow: couldn't create GLFW window
Segmentation fault (core dumped)

… however, there is a projectGenerator in /usr/local/bin/projectGenerator, and when I call that executable, it works ??!

So first question - what is the difference between /usr/local/bin/projectGenerator and /.../openFrameworks/projectGenerator/projectGenerator? All I can notice so far are different file sizes:

$ ls -la /.../openFrameworks/projectGenerator/projectGenerator /usr/local/bin/projectGenerator 
-rwxrwxr-x 1 user user 6135629 Sep  7 10:16 /.../openFrameworks/projectGenerator/projectGenerator
-rwxr-xr-x 1 root root 5786530 Sep  7 10:25 /usr/local/bin/projectGenerator

Then, as per Build All Examples on Debian :

the version in github doesn’t have the makefiles you can create them using the project generator or copying them from the template in scripts/linux/template
you’ll need both the Makefile and the config.make file

… I did the following bash one-liner:

openFrameworks$ for ix in $(find examples -name 'src'); do ixx=$(dirname $ix); echo $ix $ixx; projectGenerator -o".../openFrameworks" $ixx; done

… which utilized the /usr/local/bin/projectGenerator, and as such (apparently) passed.

Then I did this:

$ cd openFrameworks/scripts/linux/
$ ./buildAllExamples.sh

… and it generally compiled, except for this error:

/.../openFrameworks/libs/openFrameworks/app/ofAppEGLWindow.h:63:21: fatal error: EGL/egl.h: No such file or directory

… which happened apparently for examples/gles/customEGLWindowSettings. So I looked a bit, found that this header file should be in libegl1-mesa-dev (libegl1-mesa-dev-lts-trusty) which I sudo apt-get installed, after which the compile error was gone - but there appeared a linker error:

obj/linux/Debug/src/main.o: In function `void ofMainLoop::addWindow<ofAppEGLWindow>(std::shared_ptr<ofAppEGLWindow>)':
/.../openFrameworks/libs/openFrameworks/app/ofMainLoop.h:21: undefined reference to `ofAppEGLWindow::pollEvents()'
collect2: error: ld returned 1 exit status

So, I commented the exits in the buildAllExamples.sh to allow it to compile the rest, and the process seemingly completed. But now, if I try to run any of the examples, I get the same error as for the /.../openFrameworks/projectGenerator/projectGenerator:

openFrameworks$ examples/3d/3DPrimitivesExample/bin/3DPrimitivesExample
[ error ] ofAppGLFWWindow: 65544: GLX: Failed to create context: GLXBadFBConfig
[ error ] ofAppGLFWWindow: couldn't create GLFW window

openFrameworks$ examples/empty/emptyExample/bin/emptyExample
[ error ] ofAppGLFWWindow: 65544: GLX: Failed to create context: GLXBadFBConfig
[ error ] ofAppGLFWWindow: couldn't create GLFW window
Segmentation fault (core dumped)

So, my question is - what am I doing wrong, and how to I get the examples and the projectGenerator to run?

This apparently is related to OpenGL problems, and I’m not really sure what to provide here, so for starters here’s the output for glxinfo (also, glxgears works fine on my computer):

$ glxinfo
name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample, 
    GLX_EXT_create_context_es2_profile, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, 
    GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, 
    GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig, 
    GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, GLX_SGI_swap_control
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float, 
    GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
    GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile, 
    GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, 
    GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer, 
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB, 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, 
    GLX_EXT_create_context_es2_profile, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, 
    GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer, 
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) IGD x86/MMX/SSE2
OpenGL version string: 1.4 Mesa 10.5.9
OpenGL extensions:
    GL_3DFX_texture_compression_FXT1, GL_AMD_shader_trinary_minmax, 
    GL_ANGLE_texture_compression_dxt3, GL_ANGLE_texture_compression_dxt5, 
    GL_APPLE_object_purgeable, GL_APPLE_packed_pixels, 
    GL_APPLE_vertex_array_object, GL_ARB_ES2_compatibility, 
    GL_ARB_clear_buffer_object, GL_ARB_compressed_texture_pixel_storage, 
    GL_ARB_copy_buffer, GL_ARB_debug_output, GL_ARB_depth_texture, 
    GL_ARB_draw_buffers, GL_ARB_draw_elements_base_vertex, 
    GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location, 
    GL_ARB_fragment_program, GL_ARB_fragment_shader, 
    GL_ARB_framebuffer_object, GL_ARB_get_program_binary, 
    GL_ARB_half_float_pixel, GL_ARB_internalformat_query, 
    GL_ARB_invalidate_subdata, GL_ARB_map_buffer_alignment, 
    GL_ARB_map_buffer_range, GL_ARB_multi_bind, GL_ARB_multisample, 
    GL_ARB_multitexture, GL_ARB_pixel_buffer_object, GL_ARB_point_parameters, 
    GL_ARB_point_sprite, GL_ARB_provoking_vertex, GL_ARB_robustness, 
    GL_ARB_sampler_objects, GL_ARB_separate_shader_objects, 
    GL_ARB_shader_objects, GL_ARB_shading_language_100, GL_ARB_shadow, 
    GL_ARB_sync, GL_ARB_texture_border_clamp, GL_ARB_texture_compression, 
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add, 
    GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar, 
    GL_ARB_texture_env_dot3, GL_ARB_texture_mirrored_repeat, 
    GL_ARB_texture_non_power_of_two, GL_ARB_texture_rectangle, 
    GL_ARB_texture_storage, GL_ARB_transpose_matrix, 
    GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_binding, 
    GL_ARB_vertex_buffer_object, GL_ARB_vertex_program, GL_ARB_vertex_shader, 
    GL_ARB_window_pos, GL_ATI_blend_equation_separate, GL_ATI_draw_buffers, 
    GL_ATI_separate_stencil, GL_ATI_texture_env_combine3, GL_EXT_abgr, 
    GL_EXT_bgra, GL_EXT_blend_color, GL_EXT_blend_equation_separate, 
    GL_EXT_blend_func_separate, GL_EXT_blend_minmax, GL_EXT_blend_subtract, 
    GL_EXT_compiled_vertex_array, GL_EXT_copy_texture, 
    GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_framebuffer_blit, 
    GL_EXT_framebuffer_object, GL_EXT_gpu_program_parameters, 
    GL_EXT_multi_draw_arrays, GL_EXT_packed_depth_stencil, 
    GL_EXT_packed_pixels, GL_EXT_pixel_buffer_object, GL_EXT_point_parameters, 
    GL_EXT_polygon_offset, GL_EXT_provoking_vertex, GL_EXT_rescale_normal, 
    GL_EXT_secondary_color, GL_EXT_separate_specular_color, 
    GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, 
    GL_EXT_subtexture, GL_EXT_texture, GL_EXT_texture3D, 
    GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, 
    GL_EXT_texture_env_add, GL_EXT_texture_env_combine, 
    GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic, 
    GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_texture_rectangle, 
    GL_EXT_texture_sRGB, GL_EXT_texture_sRGB_decode, GL_EXT_vertex_array, 
    GL_IBM_multimode_draw_arrays, GL_IBM_rasterpos_clip, 
    GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate, 
    GL_KHR_context_flush_control, GL_KHR_debug, GL_MESA_pack_invert, 
    GL_MESA_window_pos, GL_MESA_ycbcr_texture, GL_NV_blend_square, 
    GL_NV_light_max_exponent, GL_NV_packed_depth_stencil, 
    GL_NV_texgen_reflection, GL_NV_texture_env_combine4, 
    GL_NV_texture_rectangle, GL_OES_EGL_image, GL_OES_read_format, 
    GL_S3_s3tc, GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp, 
    GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SUN_multi_draw_arrays

12 GLX Visuals
    visual  x   bf lv rg d st  colorbuffer  sr ax dp st accumbuffer  ms  cav
  id dep cl sp  sz l  ci b ro  r  g  b  a F gb bf th cl  r  g  b  a ns b eat
...
24 GLXFBConfigs:
    visual  x   bf lv rg d st  colorbuffer  sr ax dp st accumbuffer  ms  cav
  id dep cl sp  sz l  ci b ro  r  g  b  a F gb bf th cl  r  g  b  a ns b eat

Thanks in advance for any help,
Cheers!

Well, I think I found what the problem is - however, if anyone else can confirm, that would be the best.

First, let’s note what my glxinfo says by default:

$ glxinfo | grep 'OpenGL \(v\|r\)'
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) IGD x86/MMX/SSE2
OpenGL version string: 1.4 Mesa 10.5.9

So, I apparently have Mesa (driver?) version 10.5.9, which advertises OpenGL 1.4.

On the other hand, I have tried running some of the programs in the debugger gdb, and I get something like this before the crash:

$ gdb --args examples/empty/emptyExample/bin/emptyExample_debug 
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
...
(gdb) b main
Breakpoint 1 at 0x805f327: file /.../openFrameworks/examples/empty/emptyExample/src/main.cpp, line 7.
(gdb) r
Starting program: /.../openFrameworks/examples/empty/emptyExample/bin/emptyExample_debug
...
Breakpoint 1, main ()
    at /.../openFrameworks/examples/empty/emptyExample/src/main.cpp:7
7        ofSetupOpenGL(1024,768, OF_WINDOW);            // <-------- setup the GL context
(gdb) s
...
(gdb) s
ofSetupOpenGL (w=1024, h=768, screenMode=OF_WINDOW)
    at /.../openFrameworks/libs/openFrameworks/app/ofAppRunner.cpp:171
171        settings.glVersionMajor = 2;
(gdb) s
172        settings.glVersionMinor = 1;
...

So, basically, my system advertises OpenGL 1.4 - while openFrameworks sets up everything to use OpenGL 2.1. And, as noted in http://stackoverflow.com/questions/13863996/x-error-of-failed-request-glxbadfbconfig :

You’re running fourth-gen Intel silicon so:
glutInitContextVersion(3,2);
is rather…optimistic.
Unless you want software rendering, in which case you’ll have to wait a while for Mesa to get up to OpenGL 3.2.

So, my graphics card is:

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller

… and by doing lsmod | grep i9, I can see that the i915 driver is being used; for which I can see:

$ modinfo i915 | grep 'ver\(m\|s\)'
filename:       /lib/modules/3.19.0-26-generic/kernel/drivers/gpu/drm/i915/i915.ko
srcversion:     6C0E6F93C3C45F0A74447EC
vermagic:       3.19.0-26-generic SMP mod_unload modversions 686 

Not sure if this srcversion relates to a git commit of sorts or not; but as per https://en.wikipedia.org/wiki/Comparison_of_Intel_graphics_processing_units#Third_generation, the 915 are third generation Intel silicon, for which it is noted under OpenGL API support: “1.4 on Windows, 1.4 on OS X, 2.1 on Linux”; and for Linux, there is a link reference to the page Intel Brings OpenGL 2.0/2.1 To Classic i915 Mesa Driver - Phoronix. Note that in the comments for this post, it is noted:

Indeed, I see the opengl 2.1 advertised as well as the shading language level 1.2.
But the issue is that this change breaks the Unity desktop to the point of making it unusable. […]
I believe that the issue is that now unity thinks that it can rely on
some hardware features, that conversely are so painfully slow that make everything hang whenever they are invoked. As a matter of fact, whenever you see unity hanging, if you give enough time to it you will see that it is actually trying to play a fading or a translucency effect.

So, with this in mind, the only question is whether my version of Mesa/i915 driver is capable of advertising OpenGL 2.1. Note that the news post is from April 2013, while I’m running Ubuntu from 2014, which means that it is likely that my driver would have those capabilities (even if it doesn’t advertise them). I thought for a while I’d have to recompile from source (from the news post, the git should be at http://cgit.freedesktop.org/mesa/mesa/) - but then I found this:

Bug 64202 – Enabling opengl 2.1 on intel gen3 breaks the Unity desktop (and possibly others)

I did not realize that the opengl conformance level is /already/ configurable via the MESA_GL_VERSION_OVERRIDE environment variable.

Oh… could it be?

$ MESA_GL_VERSION_OVERRIDE=2.1 glxinfo | grep 'OpenGL \(v\|r\)'
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) IGD x86/MMX/SSE2
OpenGL version string: 2.1 Mesa 10.5.9

Well… indeed, it could… So finally, I can test:

$ MESA_GL_VERSION_OVERRIDE=2.1 examples/3d/3DPrimitivesExample/bin/3DPrimitivesExample
[notice ] ofGstVideoGrabber: Probing devices with udev...
[notice ] ofGstVideoGrabber: Found device 0ac8:3420, getting capabilities...
[notice ] ofGstVideoGrabber: detected v4l2 device: Sirius USB2.0 Camera
[notice ] ofGstVideoGrabber: driver: uvcvideo, version: 201480
[notice ] ofGstVideoGrabber: Capabilities: 0x84200001
[notice ] ofGstVideoGrabber: initGrabber(): selected device: Sirius USB2.0 Camera
[notice ] ofGstVideoGrabber: initGrabber(): selected format: 640x480 video/x-raw RGB framerate: 30/1
[notice ] ofGstUtils: setPipelineWithSink(): gstreamer pipeline: v4l2src name=video_source device=/dev/video0 ! video/x-raw,format=RGB,width=640,height=480,framerate=30/1    ! appsink name=ofappsink enable-last-sample=0 caps="video/x-raw, format=RGB, width=640, height=480"
libv4l2: warning v4l2 mmap buffers still mapped on close()

… and indeed - it works:

… and it’s not even that bad of a framerate (49-50 fps), for this example at least!

Well, I hope that was it with this problem at least…
Hope this helps someone,
Cheers!

3 Likes

MESA_GL_VERSION_OVERRIDE=2.1 make run fixed it for me too for the same error in OF 0.9.0 on linux-32 in my old HP Mini Netbook.

Thank you @sdaau!