4.1 - Data category
NV_parameter_buffer_object and EXT_bindable_uniform offer the same functionality but not for the same language.
In terms of GLSL, there are four data sources that a shader can process: attributes, like for example the vertex position,
its normal, its texture coordinates, the textures with all the diversity that it means (especially with the
GeForce 8800), the varying variables that make it possible to pass data from a shader to another, and finally the uniform
variables which are data that are valid for all the vertex, all the triangles and all the fragments of a GPU program.
Among these data, we usually find samplers and other material properties, as well as lights. The idea behind these
extensions is to store the value of the uniform variables into the memory of the graphic card and then be able to exchange
these variables for a same program. In order to benefit from this behavior, it is not possible to use the fixed pipeline
functions, which drops a little bit more this old method.
4.2 - Evolution of the method
Practically, a scene can contain a certain number of different lights with very different properties. But if an object
is moving inside the scene, it will be exposed to different lights according to its position; we will then just have to
change the "bindable uniform buffer objects" used by the program.
In an even more practical manner, let's consider a scene featuring few static objects that have each one their
own material but with a same applicable program for each. In the same way, we just need to change the "bindable uniform buffer object" instead of changing the value of each object
one after one, which leads to a CPU charge decrease.
Finally, one single "bindable uniform buffer object" can be applied to several different programs. For a single multi pass
light rendering, we can assume that several passes will need to access the lights' parameters. Another very interesting
contribution that will change the shader programming approach is that binding a buffer does not mean "assigning a value".
Values may be assigned at the initialization and then selected when it comes really necessary. EXT_bindable_uniform uses
the excellent buffer object API proposed by OpenGL 1.5 for the vertex buffer objects [1].
4.3 - Benefits
This extension makes me particularly happy cause I think it brings some flexibility to the GPU programming, which
may result in a decrease of the number of shaders used in a project while reducing the CPU charge and memory
consumption as well. This functionality will certainly be officially present in the next OpenGL version, even more since
the ARBis actually working on it.