Shaders, Attributes, Uniforms, and Varying - WebGL Explained