Forward compatible vs Core profile

In GL 3.3 Core specification, Appendix E, it is said that a GL context that doesn’t support deprecated features is called a forward compatible context, but the Core profile also disallow the use of deprecated features.

This is something that a lot of people don’t really understand, even though any software dictionary on the subject is quite clear. To mark something as “deprecated” means that you are saying, “You may still use this, but I, as the maker of the software, am reserving the right to yank this from any future version.” It is a strong hint that you should stop using it; nothing more.

OpenGL 3.0 deprecated a lot of functionality, but that functionality was still available. OpenGL version 3.1 removed most of the deprecated functionality; at that point, it was no longer available. 3.2 instituted the core/compatibility distinction, where the spec was divided into two separate specifications, one with the removed functionality restored, and one without the removed functionality.

A forward compatibility context (which you should not be using) removes all deprecated functionality from the context. What deprecated functionality remains from core if it was removed? Notice that I said that 3.1 removed “most” of the deprecated functionality, not “all”. There was some functionality from 3.0 that was marked deprecated but never actually removed (wide lines). That is still perfectly legal in core OpenGL, even though it is marked deprecated. Because remember: deprecation is a hint, nothing more.

Therefore, if you create a forward compatibility context, it will remove all deprecated functionality remaining in the core. Namely, wide lines. Again, you shouldn’t be using this.