text: #include "Framework.h"
  #include "Shader.h"
  
  #define MODEL_PATH "models/teapot.3ds"
  
  // Note: See the SMFL documentation for info on setting up fullscreen mode
  // and using rendering settings
  // http://www.sfml-dev.org/tutorials/1.6/window-window.php
  sf::WindowSettings settings(24, 8, 2);
  sf::Window window(sf::VideoMode(800, 600), "CS248 Rules!", sf::Style::Close, settings);
   
  // This is a clock you can use to control animation.  For more info, see:
  // http://www.sfml-dev.org/tutorials/1.6/window-time.php
  sf::Clock clck;
  
  // This creates an asset importer using the Open Asset Import library.
  // It automatically manages resources for you, and frees them when the program
  // exits.
  Assimp::Importer importer;
  const aiScene* scene;
  
  void initOpenGL();
  void loadAssets();
  void handleInput();
  void renderFrame();
  
  int main(int argc, char** argv) {
  
      initOpenGL();
      loadAssets();
  
      // Put your game loop here (i.e., render with OpenGL, update animation)
      while (window.IsOpened()) {
  
          handleInput();
          renderFrame();
          window.Display();
      }
  
      return 0;
  }
  
  
  
  void initOpenGL() {
      // Initialize GLEW on Windows, to make sure that OpenGL 2.0 is loaded
  #ifdef FRAMEWORK_USE_GLEW
      GLint error = glewInit();
      if (GLEW_OK != error) {
          std::cerr << glewGetErrorString(error) << std::endl;
          exit(-1);
      }
      if (!GLEW_VERSION_2_0 || !GL_EXT_framebuffer_object) {
          std::cerr << "This program requires OpenGL 2.0 and FBOs" << std::endl;
          exit(-1);
      }
  #endif
  
      // This initializes OpenGL with some common defaults.  More info here:
      // http://www.sfml-dev.org/tutorials/1.6/window-opengl.php
      glClearDepth(1.0f);
      glClearColor(0.15f, 0.15f, 0.15f, 0.15f);
      glEnable(GL_DEPTH_TEST);
      glViewport(0, 0, window.GetWidth(), window.GetHeight());
  }
  
  
  
  
  void loadAssets() {
      // Read in an asset file, and do some post-processing.  There is much 
      // more you can do with this asset loader, including load textures.
      // More info is here:
      // http://assimp.sourceforge.net/lib_html/usage.html
      scene = importer.ReadFile(MODEL_PATH,  
          aiProcess_CalcTangentSpace |
          aiProcess_Triangulate |
          aiProcess_JoinIdenticalVertices |
          aiProcessPreset_TargetRealtime_Quality);
  
      if (!scene || scene->mNumMeshes <= 0) {
          std::cerr << importer.GetErrorString() << std::endl;
          exit(-1);
      }
          
      //////////////////////////////////////////////////////////////////////////
      // TODO: LOAD YOUR SHADERS/TEXTURES
      //////////////////////////////////////////////////////////////////////////
  }
  
  
  
  
  void handleInput() {
      //////////////////////////////////////////////////////////////////////////
      // TODO: ADD YOUR INPUT HANDLING HERE. 
      //////////////////////////////////////////////////////////////////////////
  
      // Event loop, for processing user input, etc.  For more info, see:
      // http://www.sfml-dev.org/tutorials/1.6/window-events.php
      sf::Event evt;
      while (window.GetEvent(evt)) {
          switch (evt.Type) {
          case sf::Event::Closed: 
              // Close the window.  This will cause the game loop to exit,
              // because the IsOpened() function will no longer return true.
              window.Close(); 
              break;
          case sf::Event::Resized: 
              // If the window is resized, then we need to change the perspective
              // transformation and viewport
              glViewport(0, 0, evt.Size.Width, evt.Size.Height);
              break;
          default: 
              break;
          }
      }
  }
  
  
  
  
  
  void renderFrame() {
      //////////////////////////////////////////////////////////////////////////
      // TODO: ADD YOUR RENDERING CODE HERE.  You may use as many .cpp files 
      // in this assignment as you wish.
      //////////////////////////////////////////////////////////////////////////
  	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  }
  