WARNING: glGetError is VERY expensive

Unfortunately I haven’t the time to redo all the work I’ve undone - so I’ll leave the glGetError benchmarking as an exercise for the reader.