GL_ARB_tessellation_shader, GL_ARB_gpu_shader5, GL_ARB_draw_indirect, GL_ARB_shader_subroutine or GL_ARB_texture_gather, here are some of the new features that OpenGL 4.0 will bring.
And from the press release:
Open standard 3D API specification available immediately; Provides performance, quality and flexibility enhancements including tessellation and double precision shaders; Tight integration with OpenCL for seamless visual computing.
And OpenGL 4.0 will officialize the support of hardware tessellation (GL_ARB_tessellation_shader): very very nice!!! I’ll be able to update my tessellation demo to make it run on both NVIDIA and ATI cards…
And I bet (actually it’s sure my friends) that GeForce GTX 480 and GTX 470 will expose these new extensions.
OpenGL 3.3 and 4.0 specifications are available HERE.
OpenGL 4.0 new features:
- Support for OpenGL Shading Language 4.00, including new fragment
shader texture functions (textureLOD) that return the results of automatic
level-of-detail computations that would be performed if a texture lookup
were performed (GL_ARB_texture_query_lod – this extension only affects
the shading language, not the API).
- Ability to set individual blend equations and blend functions for each color output (GL_ARB_draw_buffers_blend).
- Mechanism for supplying the arguments to a DrawArraysInstanced or DrawElementsInstancedBaseVertex drawing command from buffer object memory (GL_ARB_draw_indirect).
- Many new features in OpenGL Shading Language 4.00 and related APIs to support capabilities of current generation GPUs (GL_ARB_gpu_shader5 – see that extension specification for a detailed summary of the features).
- Support for double-precision floating-point uniforms, including vectors and matrices, as well as double-precision floating-point data types in shaders (GL_ARB_gpu_shader_fp64)
- Ability to explicitly request that an implementation use a minimum number of unique set of fragment computation inputs when multisampling a pixel (GL_ARB_sample_shading).
- Support for “indirect subroutine calls”, where a single shader can include many subroutines and dynamically select through the API which subroutine is called from each call site (GL_ARB_shader_subroutine).
- New tessellation stages and two new corresponding shader types, tessellation control and tessellation evaluation shaders, operating on patches (fixed-sized collections of vertices) (GL_ARB_tessellation_shader).
- Support for three-component buffer texture formats RGB32F, RGB32I, and RGB32UI (GL_ARB_texture_buffer_object_rgb32).
- Cube map array textures, 2-dimensional array textures that may contain many cube map layers. Each cube map layer is a unique cube map image set (GL_ARB_texture_cube_map_array).
- New texture functions (textureGather) that determine the 2×2 footprint used for linear filtering in a texture lookup, and return a vector consisting of the first component from each of the four texels in the footprint (GL_ARB_texture_gather).
OpenGL 3.3 new features:
- Support for OpenGL Shading Language 3.30, including built-in functions for getting and setting the bit encoding for floating-point values (GL_ARB_shader_bit_encoding – this extension only affects the shading language, not the API).
- New blending functions whereby a fragment shader may output two colors, one of which is treated as the source color, and the other used as a blending factor for either source or destination colors (GL_ARB_blend_func_extended).
- A method to pre-assign attribute locations to named vertex shader inputs and color numbers to named fragment shader outputs. This allows applications to globally assign a particular semantic meaning, such as diffuse color or vertex normal, to a particular attribute location without knowing how that attribute will be named in any particular shader (GL_ARB_explicit_attrib_location).
- Simple boolean occlusion queries, which are often sufficient in preference to more general counter-based queries (GL_ARB_occlusion_query2).
- Sampler objects, which separate sampler state from texture image data. Samplers may be bound to texture units to supplant the bound texture’s sampling state, and a single sampler may be bound to more than one texture unit simultaneously, allowing different textures to be accessed with a single set of shared sampling parameters, or the same texture image data to be sampled with different sampling parameters (GL_ARB_sampler_objects).
- A new texture format for unsigned 10.10.10.2 integer textures (GL_ARB_texture_rgb10_a2ui).
- A mechanism to swizzle the components of a texture before they are returned to the shader (GL_ARB_texture_swizzle).
- A query object-based mechanism to determine the amount of time it takes to fully complete a set of GL commands without stalling the rendering pipeline (GL_ARB_timer_query).
- Ability to specify an array ”divisor” for generic vertex array attributes, which when non-zero specifies that the attribute is instanced. An instanced attribute does not advance per-vertex as usual, but rather after every divisor conceptual draw calls (GL_ARB_instanced_arrays).
- Two new vertex attribute data formats, signed 126.96.36.199 and unsigned 188.8.131.52 (GL_ARB_vertex_type_2_10_10_10_rev).