Index: makefile
===================================================================
--- makefile	(revision c40990d66ed00664cc013017b6733174e41ecb6a)
+++ makefile	(revision 8b7cfcfd52b28f7b70f2a15fb8025acaa9b1a843)
@@ -13,5 +13,5 @@
 	$(CC) $? $(DEP) $(CFLAGS) -o $@
 
-game: mygame.cpp common/shader.cpp common/texture.cpp common/controls-new.cpp
+game: game.cpp common/shader.cpp common/texture.cpp common/controls-new.cpp
 	$(CC) $? $(DEP) $(CFLAGS) -o $@
 
Index: new-game.cpp
===================================================================
--- new-game.cpp	(revision c40990d66ed00664cc013017b6733174e41ecb6a)
+++ new-game.cpp	(revision 8b7cfcfd52b28f7b70f2a15fb8025acaa9b1a843)
@@ -1,2 +1,4 @@
+// NEXT STEP; Modify the vertex shader
+
 #include "logger.h"
 
@@ -81,17 +83,30 @@
    };
 
-   GLuint vbo = 0;
-   glGenBuffers(1, &vbo);
-   glBindBuffer(GL_ARRAY_BUFFER, vbo);
+   GLfloat colors[] = {
+     1.0, 0.0, 0.0,
+     0.0, 1.0, 0.0,
+     0.0, 0.0, 1.0,
+   };
+
+   GLuint points_vbo = 0;
+   glGenBuffers(1, &points_vbo);
+   glBindBuffer(GL_ARRAY_BUFFER, points_vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
+
+   GLuint colors_vbo = 0;
+   glGenBuffers(1, &colors_vbo);
+   glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
+   glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW);
 
    GLuint vao = 0;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
+   glBindBuffer(GL_ARRAY_BUFFER, points_vbo);
+   glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
+   glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
+   glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
+
    glEnableVertexAttribArray(0);
-   glBindBuffer(GL_ARRAY_BUFFER, vbo);
-   glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
-
-   //string vertexShaderString = loadShader();
+   glEnableVertexAttribArray(1);
 
    GLuint vs = loadShader(GL_VERTEX_SHADER, "./test.vert");
@@ -101,4 +116,9 @@
    glAttachShader(shader_program, vs);
    glAttachShader(shader_program, fs);
+
+   // this must be used on OSX instead of using layout() in the shader
+   glBindAttribLocation(shader_program, 0, "vertex_position");
+   glBindAttribLocation(shader_program, 1, "vertex_color");
+
    glLinkProgram(shader_program);
 
Index: test.frag
===================================================================
--- test.frag	(revision c40990d66ed00664cc013017b6733174e41ecb6a)
+++ test.frag	(revision 8b7cfcfd52b28f7b70f2a15fb8025acaa9b1a843)
@@ -1,9 +1,8 @@
 #version 410
 
-//uniform vec4 inputColor;
-out vec4 fragColor;
+in vec3 color;
+out vec4 frag_color;
 
 void main() {
-  //fragColor = inputColor;
-  fragColor = vec4(0.5, 0.0, 0.5, 1.0);
+  frag_color = vec4(color, 1.0);
 }
Index: test.vert
===================================================================
--- test.vert	(revision c40990d66ed00664cc013017b6733174e41ecb6a)
+++ test.vert	(revision 8b7cfcfd52b28f7b70f2a15fb8025acaa9b1a843)
@@ -1,7 +1,15 @@
 #version 410
 
+// using layout() doens't work on OSX, so use glBindAttribLocation() in the C++ code instead
+// layout(position = 0) in vec3 vertex_position;
+// layout(position = 1) in vec3 vertex_color;
+
 in vec3 vertex_position;
+in vec3 vertex_color;
+
+out vec3 color;
 
 void main() {
+  color = vertex_color;
   gl_Position = vec4(vertex_position, 1.0);
 }
