starting on a more flexible attribute format to expose all arguments of gl.vertexAttribPointer