In chapter 3 you say that GL_STREAM_DRAW is to be optimized for multiple data changes. But according to the 3.3 spec it is a hint to tell the implementation that the data is to be written once and only used a few times at most. I guess you mean GL_DYNAMIC_DRAW. I hope this helps. Btw awesome tutorial.