Why should I prefer core profile over compatibility?

I am updating an OpenGL application, switching from fixed function pipeline to modern opengl.

However, it’s not entirely clear to me what are the benefits of a core profile instead of a compatibility profile.

I am tempted to use a compatibility profile to be able to gradually transition from old opengl to modern, even being able to ship the application without the need to get rid of all the functions that are obsolete in a core profile.

However, I don’t know what are the benefits of sticking with core only. For example:

  1. should I expect more reliable driver behavior by using the core profile?
  2. from OpenGL Context wiki page:

In 3.2, OpenGL was effectively split into two profiles, core and compatibility. An implementation was only required to define core, so compatibility is not guaranteed to be available. However, on most implementations, the compatibility profile will be available.

How can I quantify that “on most implementations”?

At present, to the extent that MacOS still has OpenGL support, they have only supported core OpenGL versions 3.2+. They offer a GL 2.1 implementation, but you can’t access any of the 3.2+ stuff through that.

My understanding is that on Linux, several open-source OpenGL drivers only support the core profile of 3.2+ functionality.

So the primary benefit is cross-platform functionality.

1 Like