Writing applications in OpenGL has always had a high learning curve, however, one additional obstacle I recently encountered, and that I’d like to provide a warning about; hybrid graphics. The majority of high performance laptops now use a hybrid architecture involving an integrated Intel GPU for drawing to the display and low intensity applications. Then there is a dedicated graphics card for handling applications with the configured profile for graphically intensive applications (games, image editors, etc). However, each graphics processor has its own version of OpenGL.

To find what version of OpenGL your integrated gpu supports run glxinfo

glxInfo
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.1.3
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
GL_3DFX_texture_compression_FXT1, GL_AMD_conservative_depth, …

(I highly recommend using this application as this tool will also provide a list for all supported extensions)

Now that I know my integrated GPU is attempting to due all the hard lifting, how do I switch to my dedicated graphics card? well this depends on whether your motherboard has a software multiplexed graphics architecture or a hardware multiplexer. For the hardware multiplexer, switching to the dedicated card is a setting that should be present in the BIOS.

For the software implementation the dedicated card can be turned on and off at will. With Nvidia on Windows, the answer is simple. Nvidia’s control panel has a setting to switch the behavior depending on the program. From what I understand the open source optimus (nvidia’s hybrid technology) driver noveau does not support this behavior so the dedicated must be forced on. More information can be found here