         out     vec4            fragmentColour; //!< The computed output colour of this particular pixel;
 
 
+/// <summary> Updates the ambient, diffuse and specular colours from the materialTBO for this fragment. </summary>
+void obtainMaterialProperties();
+
 /// <summary> Can be used to colour the scene using red, green or and blue triangles. </summary>
 /// <returns> A single colour based on the primitive ID of the current triangle. </returns>
 vec3 primitiveColour();

            return vec3 (0.0, 0.0, 1.0);
    }
}




float pointLightAttenuation (const float distance, const float range, bool useSmoothstep)

    float distance = length (cameraPosition - Q);
    vec3 L = (cameraPosition - Q) / distance;

    vec3 light = vec3 (1.0, 1.0, 1.0) * pointLightAttenuation (distance, 250.0, true);
    
    float lambertian = max (dot (L, N), 0);

    return light * (diffuse * lambertian);
}


vec3 primitiveColour()
{
