For my personal projects, I have moved to core-GL3.2. I did not regret it yet.
What I like most of it is that it somehow "frees your mind":
1.) You no longer need to decide "do I use fixed function for this, or do I write a shader?". Now everything is done in shaders. And writing a just small shader is most times easier than to configure the FFP to achieve a certain effect.
2.) Which version of an extension do I use (EXT/ARB/Core)? Things like geometry shaders and FBOs are "just there".
3.) In your program, you no longer need to care about mixing various fixed function states and their modern counterparts. No longer you need to care about glEnable(GL_TEXTURE_2D) and the like. I never need to use glUseProgram(0). Shaders are always active, etc...
4.) No more wondering "do I use built-in GL state in my shaders or do I use my own? Which one is faster?". Since most built-in stuff is gone, the answer is clear now :-)
There are some downsides, though. Currently, there is no measurable performance improvement between the core-profile and the compatibility profile. But there's hope, that one day, the drivers will make a distinction and reward my efforts :-)
I used immediate mode for drawing debugging stuff. I needed to implement a small "Immediate Mode Emulation" for that purpose now. Since all matrix-stack stuff is gone, I needed to implement it by myself, using UBOs. Once done, I don't miss it anymore.
What I really miss a bit is glPushAttrib/glPopAttrib... I used it often to temporarily change state and then restore it when done. I have now resorted to some kind of "fixed default state". I just assume some "default state" that must be set is always set this way. Whenever I need to desert from this state, I restore it by hand afterwards.
I really wonder how "foreign" OpenGL code can work together with my code, because I now have to do many assumptions on how state is set, how matrices are transported into my shaders and the like...
On the professional side, things are a bit different. The by far biggest problem is that for GL3.2 you need to assume most recent drivers. And that can be a real pain. Customers are often reluctant to change their (certified) drivers. So you often have to deal with 2-years old drivers :-( So GL3.2 is a no go yet... maybe in 5 years. If I only could tell them, that our software would run 2x times faster with GL3.2 they probably would get interested, though....




