The first OpenGL specification was released in 1992, subsequent updates mostly added new functionality to the fixed-function pipeline. With OpenGL 2.0 the possibility was added to freely program parts of the pipeline. Starting with OpenGL 3.0, it was tried to clean the API of function that do not fit the actual hardware anymore and are thus slow and hard to mix with new functions. As a result the OpenGL specification was split into two parts with OpenGL 3.2: The core profile defines the modern parts of OpenGL with a programmable pipeline, the compatibility profile also adds the old functions to be still able to run old software on modern systems. Driver developers are free to just support core, compatibility or both. Apple for example only supports core for OpenGL 3.2 or later (and OpenGL 2.1). The OpenGL 3.3 core specification was also the basis for OpenGL ES 3.0 as it will be used on most smartphones in the future. All newer OpenGL versions after 3.2 just added new functionality (often making new hardware features available).
New applications should not be developed in old OpenGL to be better portable, future-proof and having better performance. For this I would strongly suggest OpenGL core (== OpenGL 3.2 core or later) resources for learning and to ignore all old fixed-function oriented tutorials. Note: modern applications can be developed on OpenGL 3.0 capable hardware as well, but it's less obvious which subsets should be avoided.
Two good resources for learning modern OpenGL are:
- https://videoag.fsmpi.rwth-aachen.de/?course=13ws-cg Videos of the CG1 lecture including a 3h OpenGL crash course.
- Slides of the CG lecture: /data/diskstation-data/cg_material_for_internal_use/slides
Tutorials for OpenGL ES 2.0 are also partially ok as OpenGL ES has very much in common with modern core OpenGL. OpenGL ES 3.0 tutorials would be better as it is nearly a full subset of modern OpenGL 3.3 core.
A good book for learning to write Shaders is "OpenGL 4.0 Shading language cookbook" by David Wolff (ignore the "4.0", it's a good resource for all modern versions).
Bad resources are:
- All tutorials that start with the fixed-function pipeline (e.g. glBegin()/glEnd() style rendering, rendering without shaders etc.)
- Books that explain all parts of OpenGL compatibility without discussing which parts are oly present for backwards compatibility and should be avoided for new apps (e.g. the famous "Red Book").
- http://www.andersriggelsen.dk/glblendfunc.php OpenGL blend modi overview