title: OpenGL 4.1 and 3.1+, What are key differences?
body: <p>I understand that OpenGL 4 and 3 are fairly similar, especially 3.1 and 4.1. With both being essentially released together, it can be difficult to understand the rationale for OpenGL 4.0/4.1.</p>
  
  <p>In previous releases of OpenGL, minor version increments upward until substantial changes accumulated into a new major version. OpenGL 3.x and 4.x introduced backwards-incompatible API changes and then OpenGL 3.2 and 3.3 are said to be specifically branches of the 3 series which are not forward compatible while 3.1 is compatible with 4.1+</p>
  
  <p>What key differences does OpenGL 4.1 offer compared with OpenGL 3.1 that warrant it to be classified under a new major version?</p>
  
  <p>Bonus: Do any of the differences provide performance increases in any situations over GL3 or just accessibility?</p>
  
  <blockquote>
    <p>Edit: Some extra findings based on answers</p>
  </blockquote>
  
  <hr>
  
  <blockquote>
    <p>OpenGL 3.3 was made to compliment OpenGL 4.0 to incorporate as much of the functionality as they could into older hardware. Choosing between OpenGL 3 and 4, 3.3 may be a better choice <em>sometimes</em>. 4.1 has added GL ES 2.0 compatibility however and some nice features.</p>
  </blockquote>
  
  <hr>
  
  <blockquote>
    <p>One of the bigger workflow differences would be added GPU programing steps in the pipeline via the new tessellation shaders. Another would be <strong>multiple viewports</strong> to render to.
    I believe the new level of detail feature would change the workflow I'm using and perhaps other quite a bit, though I have not looked into this feature in depth.</p>
  </blockquote>
  
  <p>Please let me know if you see any misconceptions or areas to improve. </p>
  
  <blockquote>
    <p>Keynotes (apparently removed from answer while asking on meta..
    For temporary reference of what the actual answer was.)</p>
    
    <p><a href="http://www.opengl.org/registry/doc/glspec41.core.20100725.pdf" rel="noreferrer"><strong>Appendix G - K</strong> For <strong>OpenGL 3.1</strong> features through <strong>OpenGL 4.1</strong>
    features</a></p>
    
    <p><a href="http://www.khronos.org/news/press/releases/khronos-unleashes-cutting-edge-cross-platform-graphics-acceleration-opengl4" rel="noreferrer">Khronos Group Release Of OpenGL 4.0</a> may be "easier to read" :)</p>
    
    <ul>
    <li><strong>Sampler Objects</strong></li>
    <li><strong>Instanced Arrays and Shaders</strong></li>
    <li><p><strong>texture_cube_map_array and texture_gather</strong></p></li>
    <li><p><strong>GLSL 4.0</strong> and <strong>dynamic LOD</strong></p></li>
    <li><strong>shader_subroutine</strong> and <strong>sample_shading</strong></li>
    <li><strong>separate_shader_objects</strong></li>
    <li>Increase required sizes for <strong>texture/renderbuffers</strong></li>
    <li><strong>64 bit floating point</strong> vertex attributes</li>
    <li><strong>get_program_binary</strong></li>
    <li>+2 <strong>Tesselation shaders</strong></li>
    </ul>
  </blockquote>