Since we are only creating this and never updating, there is no need for the original approach with the individual data to be updated. Note we only populate the GPU data when binding the UBO, so we can in the future easily create the UBOs in a separate thread than the main drawing one. Also at the moment animated materials are not working. To fix that we need to free/tag for free the GPUMaterials in BKE_material_eval.