Index: opengl-game.cpp
===================================================================
--- opengl-game.cpp	(revision a6f68333e3e494e2e7baf6960f8d915391cd4acd)
+++ opengl-game.cpp	(revision 92cbc6a21fe6c557e72317a223bfe79122fbb375)
@@ -73,4 +73,18 @@
 
 void OpenGLGame::initOpenGL() {
+   glfwMakeContextCurrent(window);
+   glViewport(0, 0, gui->getWindowWidth(), gui->getWindowHeight());
+
+   glewExperimental = GL_TRUE;
+   glewInit();
+
+   if (GLEW_KHR_debug) {
+      cout << "FOUND GLEW debug extension" << endl;
+      glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
+      glDebugMessageCallback((GLDEBUGPROC)opengl_debug_callback, nullptr);
+      cout << "Bound debug callback" << endl;
+   } else {
+      cout << "OpenGL debug message callback is not supported" << endl;
+   }
 }
 
@@ -100,4 +114,11 @@
       }
 
+      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+      // Anton's book suggests placing this here, after glClear(). Check it's impact on framerate
+      // TODO: This doesn't seem to work correctly when in the loop. DO some research
+      // max viewport dims are clamped to glGet(GL_MAX_VIEWPORT_DIMS)
+      //glViewport(0, 0, gui->getWindowWidth(), gui->getWindowHeight());
+
       glfwSwapBuffers(window);
    }
@@ -109,2 +130,102 @@
    delete gui;
 }
+
+void APIENTRY opengl_debug_callback(
+   GLenum source,
+   GLenum type,
+   GLuint id,
+   GLenum severity,
+   GLsizei length,
+   const GLchar* message,
+   const void* userParam
+) {
+   string strMessage(message);
+
+   // TODO: Use C++ strings directly and see if there are other ways to clean
+   // this function up
+   char source_str[2048];
+   char type_str[2048];
+   char severity_str[2048];
+
+   switch (source) {
+      case 0x8246:
+         strcpy(source_str, "API");
+         break;
+      case 0x8247:
+         strcpy(source_str, "WINDOW_SYSTEM");
+         break;
+      case 0x8248:
+         strcpy(source_str, "SHADER_COMPILER");
+         break;
+      case 0x8249:
+         strcpy(source_str, "THIRD_PARTY");
+         break;
+      case 0x824A:
+         strcpy(source_str, "APPLICATION");
+         break;
+      case 0x824B:
+         strcpy(source_str, "OTHER");
+         break;
+      default:
+         strcpy(source_str, "undefined");
+         break;
+   }
+
+   switch (type) {
+      case 0x824C:
+         strcpy(type_str, "ERROR");
+         break;
+      case 0x824D:
+         strcpy(type_str, "DEPRECATED_BEHAVIOR");
+         break;
+      case 0x824E:
+         strcpy(type_str, "UNDEFINED_BEHAVIOR");
+         break;
+      case 0x824F:
+         strcpy(type_str, "PORTABILITY");
+         break;
+      case 0x8250:
+         strcpy(type_str, "PERFORMANCE");
+         break;
+      case 0x8251:
+         strcpy(type_str, "OTHER");
+         break;
+      case 0x8268:
+         strcpy(type_str, "MARKER");
+         break;
+      case 0x8269:
+         strcpy(type_str, "PUSH_GROUP");
+         break;
+      case 0x826A:
+         strcpy(type_str, "POP_GROUP");
+         break;
+      default:
+         strcpy(type_str, "undefined");
+         break;
+   }
+   switch (severity) {
+      case 0x9146:
+         strcpy(severity_str, "HIGH");
+         break;
+      case 0x9147:
+         strcpy(severity_str, "MEDIUM");
+         break;
+      case 0x9148:
+         strcpy(severity_str, "LOW");
+         break;
+      case 0x826B:
+         strcpy(severity_str, "NOTIFICATION");
+         break;
+      default:
+         strcpy(severity_str, "undefined");
+         break;
+   }
+
+   if (string(severity_str) != "NOTIFICATION") {
+      cout << "OpenGL Error!!!" << endl;
+      cout << "Source: " << string(source_str) << endl;
+      cout << "Type: " << string(type_str) << endl;
+      cout << "Severity: " << string(severity_str) << endl;
+      cout << strMessage << endl;
+   }
+}
Index: opengl-game.hpp
===================================================================
--- opengl-game.hpp	(revision a6f68333e3e494e2e7baf6960f8d915391cd4acd)
+++ opengl-game.hpp	(revision 92cbc6a21fe6c557e72317a223bfe79122fbb375)
@@ -21,3 +21,13 @@
 };
 
+void APIENTRY opengl_debug_callback(
+   GLenum source,
+   GLenum type,
+   GLuint id,
+   GLenum severity,
+   GLsizei length,
+   const GLchar* message,
+   const void* userParam
+);
+
 #endif // _OPENGL_GAME_H
