https://medium.com/@enzojade62/breaking-down-the-basics-understanding-opengl-for-students-34279401d43e