Parallelism and the Difference Between Attributes and Uniforms

There is an important distinction to make between attributes and uniforms. When a draw call is invoked (using drawArrays or drawElements), the GPU will launch several copies of the vertex shader in parallel. Each copy will receive a different set of attributes. These attributes are drawn from the VBOs that are mapped onto the respective attributes.

On the other hand, all of the copies of the vertex shaders will receive the same uniforms  hence the name: uniform. In other words, uniforms can be seen as constants per draw call:

Once lights, normals, and materials are passed to the program, the next step is to determine which shading and lighting models we will implement. Let's investigate what this involves.