080811 / OpenGL 3.0

previous | next

OpenGL 3.0 is here! GLSL spec | GL spec

Thanks ARB for getting GL3 up to date with current GPU hardware!

In short, GL3 is an incremental update to GL2 with added support for some of the most important current GPU hardware features, and a set path towards spec simplification (via depreciation of parts of the API). I am personally thankful for what they did manage to get into the spec, and cannot wait for updated drivers from the core vendors!

GL 3.0

1. Unified shader support!
2. Conditional rendering.
3. Fine buffer control.
4. Floating point color and depth support for textures and renderbuffers now core.
5. Framebuffer objects now core.
6. Half float support now core.
7. Multisample now core.
8. Integer support.
9. Texture arrays and texel fetch.
10. Packed depth/stencil textures and renderbuffers.
11. Per render target blend enables and color write masks.
12. Better support for vendor compressed texture formats.
13. Single and double channel support in textures and renderbuffers.
14. Transform feedback.
15. Vertex arrays.
16. sRGB framebuffer mode and texture support.
17. 8 render targets.
18. 16 vertex attributes.
19. 1024 uniforms.
20. 64 varying components.
21. 16 combined vertex and fragment texture units.

Other GL3 highlights,

1. Framebuffer object now supports "if the attachment sizes are not all identical, rendering will be limited to the largest area that can fit in all of the attachments (an intersection of rectangles having a lower left of (0; 0) and an upper right of (width; height) for each attachment)" as well as "If the attachment sizes are not all identical, the values of pixels outside the common intersection area after rendering are undefined".

2. Multisample support for renderbuffers also looks to be good, along with attachment support for cubemaps and texture arrays!

3. Rendering to texture when the texture is in use is allowed but marked as undefined under the proper conditions. Will have to check if reverse mipmap generation pattern now works...

4. We can thank Blizzard and Apple for this, MapBufferRange() supports access to part of a buffer with key access parameter options: MAP_INVALIDATE_RANGE_BIT, MAP_INVALIDATE_BUFFER_BIT, MAP_FLUSH_EXPLICIT_BIT, and MAP_UNSYNCHRONIZED_BIT. FlushMappedBufferRange() should also be quite useful.

5. Framebuffers now support attachments with different formats and bit depths.

Depreciation highlights,

1. Most of the fixed function is going away.
2. Texture borders are going away for good.
3. Display lists. Wonder if anything is going to replace command buffer generation?
4. Now need to use Gen*() functions instead of application generated object names. Obvious move towards rolling in new object API model.

GLSL 1.30

The new GLSL language support is awesome.

1. Integer support in uniforms, variables, shader inputs and outputs, and textures.
2. Declarations with in/inout/out instead of attribute/varying.
3. Interpolation control (non-perspective).
4. Texture arrays, texel fetch (integer indexed), and offsetting.
5. Better built in function support (ie trunc(), round(), isnan(), etc).
6. User defined vertex inputs and fragment outputs.
7. Support for gl_VertexID.
8. Precision qualifiers (not yet functional).
9. Clean up of texture interface, projective cube maps textures and shadow.
10. Explicit gradient texture lookup.
11. Common blocks which can be backed by buffer in the API.
12. And more...