Index: shaders/scene.frag
===================================================================
--- shaders/scene.frag	(revision e1308e874d193cdc00723f7df1f19245df234d38)
+++ shaders/scene.frag	(revision 055750aa780089e54a6a30e8455284e2e1f4883c)
@@ -2,5 +2,5 @@
 #extension GL_ARB_separate_shader_objects : enable
 
-layout(binding = 1) uniform sampler2D texSampler;
+layout(binding = 2) uniform sampler2D texSampler;
 
 layout(location = 0) in vec3 fragColor;
Index: shaders/scene.vert
===================================================================
--- shaders/scene.vert	(revision e1308e874d193cdc00723f7df1f19245df234d38)
+++ shaders/scene.vert	(revision 055750aa780089e54a6a30e8455284e2e1f4883c)
@@ -2,9 +2,16 @@
 #extension GL_ARB_separate_shader_objects : enable
 
+struct Object {
+   mat4 model;
+};
+
 layout (binding = 0) uniform UniformBufferObject {
-   mat4 model;
    mat4 view;
    mat4 proj;
 } ubo;
+
+layout(binding = 1) readonly buffer StorageBufferObject {
+    Object objects[];
+} sbo;
 
 layout(location = 0) in vec3 inPosition;
@@ -19,4 +26,4 @@
    fragTexCoord = inTexCoord;
 
-   gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 1.0);
+   gl_Position = ubo.proj * ubo.view * sbo.objects[0].model * vec4(inPosition, 1.0);
 }
Index: shaders/ship.vert
===================================================================
--- shaders/ship.vert	(revision e1308e874d193cdc00723f7df1f19245df234d38)
+++ shaders/ship.vert	(revision 055750aa780089e54a6a30e8455284e2e1f4883c)
@@ -2,9 +2,16 @@
 #extension GL_ARB_separate_shader_objects : enable
 
+struct Object {
+   mat4 model;
+};
+
 layout (binding = 0) uniform UniformBufferObject {
-   mat4 model;
    mat4 view;
    mat4 proj;
 } ubo;
+
+layout(binding = 1) readonly buffer StorageBufferObject {
+    Object objects[];
+} sbo;
 
 layout(location = 0) in vec3 vertex_position;
@@ -26,9 +33,9 @@
 // Check Anton's book to see how to fix this
 void main() {
-   position_eye = vec3(ubo.view * ubo.model * vec4(vertex_position, 1.0));
+   position_eye = vec3(ubo.view * sbo.objects[0].model * vec4(vertex_position, 1.0));
    //position_eye = vec3(view * model_mats[ubo_index] * vec4(vertex_position, 1.0));
 
    // Using 0.0 instead of 1.0 means translations won't effect the normal
-   normal_eye = normalize(vec3(ubo.view * ubo.model * vec4(vertex_normal, 0.0)));
+   normal_eye = normalize(vec3(ubo.view * sbo.objects[0].model * vec4(vertex_normal, 0.0)));
    //normal_eye = normalize(vec3(view * model_mats[ubo_index] * vec4(vertex_normal, 0.0)));
    color = vertex_color;
