Index: new-game.cpp
===================================================================
--- new-game.cpp	(revision be246ad1197b42944abf234838d5607258161626)
+++ new-game.cpp	(revision ec4456b702cdb5257ed652114255d327340fb52f)
@@ -6,12 +6,23 @@
 #include <cstdio>
 #include <iostream>
+#include <fstream>
 
 using namespace std;
+
+GLuint loadShader(GLenum type, string file);
+
+const bool FULLSCREEN = false;
+
+void glfw_error_callback(int error, const char* description) {
+   gl_log_err("GLFW ERROR: code %i msg: %s\n", error, description);
+}
 
 int main(int argc, char* argv[]) {
    cout << "New OpenGL Game" << endl;
 
-   restart_gl_log();
+   if (!restart_gl_log()) {}
+   gl_log("starting GLFW\n%s\n", glfwGetVersionString());
 
+   glfwSetErrorCallback(glfw_error_callback);
    if (!glfwInit()) {
       fprintf(stderr, "ERROR: could not start GLFW3\n");
@@ -26,5 +37,24 @@
 #endif
 
-   GLFWwindow* window = glfwCreateWindow(640, 480, "Hello Triangle", NULL, NULL);
+   glfwWindowHint(GLFW_SAMPLES, 4);
+
+   GLFWwindow* window = NULL;
+
+   int width = 640;
+   int height = 480;
+
+   if (FULLSCREEN) {
+      GLFWmonitor* mon = glfwGetPrimaryMonitor();
+      const GLFWvidmode* vmode = glfwGetVideoMode(mon);
+
+      cout << "Fullscreen resolution " << vmode->width << "x" << vmode->height << endl;
+      window = glfwCreateWindow(vmode->width, vmode->height, "Extended GL Init", mon, NULL);
+
+      width = vmode->width;
+      height = vmode->height;
+   } else {
+      window = glfwCreateWindow(width, height, "Hello Triangle", NULL, NULL);
+   }
+
    if (!window) {
       fprintf(stderr, "ERROR: could not open window with GLFW3\n");
@@ -35,4 +65,6 @@
    glewExperimental = GL_TRUE;
    glewInit();
+
+   // glViewport(0, 0, width*2, height*2);
 
    const GLubyte* renderer = glGetString(GL_RENDERER);
@@ -61,25 +93,8 @@
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
 
-   const char* vertex_shader =
-   "#version 410\n"
-   "in vec3 vp;"
-   "void main() {"
-   "   gl_Position = vec4(vp, 1.0);"
-   "}";
+   //string vertexShaderString = loadShader();
 
-   GLuint vs = glCreateShader(GL_VERTEX_SHADER);
-   glShaderSource(vs, 1, &vertex_shader, NULL);
-   glCompileShader(vs);
-
-   const char* fragment_shader =
-   "#version 410\n"
-   "out vec4 frag_color;"
-   "void main() {"
-   "   frag_color = vec4(0.5, 0.0, 0.5, 1.0);"
-   "}";
-
-   GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
-   glShaderSource(fs, 1, &fragment_shader, NULL);
-   glCompileShader(fs);
+   GLuint vs = loadShader(GL_VERTEX_SHADER, "./test.vert");
+   GLuint fs = loadShader(GL_FRAGMENT_SHADER, "./test.frag");
 
    GLuint shader_program = glCreateProgram();
@@ -93,6 +108,11 @@
       glBindVertexArray(vao);
       glDrawArrays(GL_TRIANGLES, 0, 3);
+
       glfwPollEvents();
       glfwSwapBuffers(window);
+
+      if (GLFW_PRESS == glfwGetKey(window, GLFW_KEY_ESCAPE)) {
+         glfwSetWindowShouldClose(window, 1);
+      }
    }
 
@@ -100,2 +120,29 @@
    return 0;
 }
+
+GLuint loadShader(GLenum type, string file) {
+  cout << "Loading shader from file " << file << endl;
+
+  ifstream shaderFile(file);
+  GLuint shaderId = 0;
+
+  if (shaderFile.is_open()) {
+    string line, shaderString;
+
+    while(getline(shaderFile, line)) {
+      shaderString += line + "\n";
+    }
+    shaderFile.close();
+    const char* shaderCString = shaderString.c_str();
+
+    shaderId = glCreateShader(type);
+    glShaderSource(shaderId, 1, &shaderCString, NULL);
+    glCompileShader(shaderId);
+
+    cout << "Loaded successfully" << endl;
+  } else {
+    cout << "Failed to loade the file" << endl;
+  }
+
+  return shaderId;
+}
Index: test.frag
===================================================================
--- test.frag	(revision ec4456b702cdb5257ed652114255d327340fb52f)
+++ test.frag	(revision ec4456b702cdb5257ed652114255d327340fb52f)
@@ -0,0 +1,9 @@
+#version 410
+
+//uniform vec4 inputColor;
+out vec4 fragColor;
+
+void main() {
+  //fragColor = inputColor;
+  fragColor = vec4(0.5, 0.0, 0.5, 1.0);
+}
Index: test.vert
===================================================================
--- test.vert	(revision ec4456b702cdb5257ed652114255d327340fb52f)
+++ test.vert	(revision ec4456b702cdb5257ed652114255d327340fb52f)
@@ -0,0 +1,7 @@
+#version 410
+
+in vec3 vertex_position;
+
+void main() {
+  gl_Position = vec4(vertex_position, 1.0);
+}
