copy from http://phpopengl.sourceforge.net/