Just like expected OpenGL 3.2 get released for Siggraph 2009! Three OpenGL specification within a year... A year ago the OpenGL community was really angry about the OpenGL 3.0 released at Siggraph 2008 then OpenGL 3.1 got released at GDC 2009 unexpectingly after 6 months and again with OpenGL 3.2 we roughtly wait 6 months ... impressive!
Like with OpenGL 3.1, expect for GL_ARB_compatibility, I expect a good feedback from the developers. The amount of features is hudge and finally reach D3D 10.1 hardware if we include the new ARB extensions.
The past few months we saw a lot of AMD extensions released and with this release I think we got the confirmation of the full involvment of AMD for OpenGL. AMD contributions are everywhere with these releases and I actually wonder if they were more active than nVidia ... I'm really considering the RV870 to become my main development card when released!
Let's go to the main subject, the features of OpenGL 3.2, GLSL 1.5 and the new extensions! Geometry shaders are now part of OpenGL 3.2 core ... I'm still really septic about this choice, I'm waiting for next hardware generation (RV870 and GT300) to give me wrong.
For me the big new feature for this release is synchronization objects. This extension aimed to get more control than just glClear and glFinish during the commands list execusion, it provides a more accurate synchronization between the CPU and the GPU, between OpenGL contexts and between OpenGL and OpenCL.
A main topic for these release is the interoperability with other APIs, especially Direct3D. GL_ARB_vertex_array_bgra which provides a similar image format than Direct3D DXGI_FORMAT_B8G8R8A8_UNORM. GL_ARB_fragment_coord_conventions allows to use framebuffer coordinate with (0, 0) on the upper left corner like X11, Direct3D or GDI. GL_ARB_provoking_vertex allows to choose the provoking vertex convention either like Reality Lab and Direct3D (first vertex) or OpenGL (last vertex). All these features are the direct thoughput of the recent increase of involvement of the gaming industrie within the ARB to help cross platform development. Very nice for us developers and I wish to sew the gaming industrie contribution to keep growing in the future. Let's note a new extension released on nVidia website, GL_EXT_separate_shader_objects, which allows separating programs per stage like Cg and HLSL.
Other nice features from the gaming industrie is this GL_ARB_draw_elements_base_vertex. It allows drawing several meshes from a single set of vertex buffers using the same element array. It will reduces the memory and the penality of binding a buffer especially in cases where instancing is used. A must use feature!
Other main topic is deferred shading. I think it is the future of many rasterizer based graphics engine and I'm sure that we are going to see many progress on that side just because all the knowledge gaps haven't been filled yet. New ARB extensions make OpenGL reaching D3D 10.1 hardware level. GL_ARB_texture_multisample to access to sample values, GL_ARB_sample_shading to force the processing of a minimum number of samples per fragment to reduce antialising, GL_ARB_draw_buffers_blend which extends GL_EXT_draw_buffers2 with per rendertarget functions and equations. GL_ARB_texture_gather provides an equivallent to the Direct3D 10.1 gather4 instruction to fetch 4 texels components from 4 different texel in one call for soft shadow and some post processing effects.
Again, we have these features that we didn't expect to see anymore in the OpenGL core even if everyone use it. GL_ARB_depth_clamp which allows line and polygon primitives to be rasterized without clipping the primitive to the near or far clip volume planes like it is really useful with stencil shadow valumes. GL_ARB_seamless_cube_map allows the implementation to access adjacent cube map faces for the filtering and GL_ARB_texture_cube_map_array provides D3D10.1 cube map arrays.
Finally, an exciting extension I have discored like a new concept to study: GL_ARB_texture_query_lod. This extension allows to get the LOD that would have been used for a texture fetch. This would make possible a per fragment LOD, like we could choose a lighting algorithm more or less accurate according this LOD value... I'm quite afraid of flickering if we do so but there is definitly something to explore here.
To conclude, I'm fairly happy with this new release and I'm wondering when are we going to see the next OpenGL release. It feels like OpenGL is evolution is quicker than the hardware which is actually required to keep OpenGL as an effective graphics API. My wish is to see some progress on the bindless API for OpenGL 3.3 at GDC 2010 and a Direct3D 11 level for OpenGL 3.4 (4.0?) at Siggraph 2010. Fingers crossed!
Don't forgot that Siggraph is on and the Khronos Group is going to hold a BOF for OpenCL tomorrow and a BOF for OpenGL on Wednesday! It can't be missed!