topical media & game development

talk show tell print

lib-of-vs-libs-openFrameworks-app-ofAppRunner.cpp / cpp



  include <ofAppRunner.h>
  
  //========================================================================
  // static variables:
  
  ofBaseApp        *                                OFSAptr = NULL;
  bool                                                 bMousePressed;
  bool                                                bRightButton;
  int                                                        width, height;
  
  ofAppBaseWindow *                        window = NULL;
  
  //========================================================================
  // core events instance & arguments
  ifdef OF_USING_POCO
  ofCoreEvents                                 ofEvents;
  ofEventArgs                                        voidEventArgs;
  endif
  
  //========================================================================
  // default windowing
  ifdef TARGET_OF_IPHONE
          #include <ofAppiPhoneWindow.h>
  else
          #include <ofAppGlutWindow.h>
  endif
  
  //--------------------------------------
  void ofSetupOpenGL(ofAppBaseWindow * windowPtr, int w, int h, int screenMode){
          window = windowPtr;
          window->setupOpenGL(w, h, screenMode);
  }
  
  //--------------------------------------
  void ofSetupOpenGL(int w, int h, int screenMode){
          #ifdef TARGET_OF_IPHONE
                  window = new ofAppiPhoneWindow();
          #else
                  window = new ofAppGlutWindow();
          #endif
  
          window->setupOpenGL(w, h, screenMode);
  }
  
  //-----------------------         gets called when the app exits
  //                                                         currently looking at who to turn off
  //                                                        at the end of the application
  
  void ofExitCallback();
  void ofExitCallback(){
  
          //------------------------
          // try to close FMOD:
          ofSoundPlayer::closeFmod();
          //------------------------
          // try to close quicktime, for non-linux systems:
  
          #if defined( TARGET_OSX ) || defined( TARGET_WIN32 )
          closeQuicktime();
          #endif
  
          //------------------------
          // try to close freeImage:
          ofCloseFreeImage();
          //------------------------
          // try to close free type:
          // ....
  
          #ifdef WIN32_HIGH_RES_TIMING
                  timeEndPeriod(1);
          #endif
  
          if(OFSAptr)OFSAptr->exit();
  
          #ifdef OF_USING_POCO
                  ofNotifyEvent( ofEvents.exit, voidEventArgs );
          #endif
  
          if(OFSAptr)delete OFSAptr;
  }
  
  //--------------------------------------
  void ofRunApp(ofBaseApp * OFSA){
  
          OFSAptr = OFSA;
          if(OFSAptr){
          OFSAptr->mouseX = 0;
          OFSAptr->mouseY = 0;
          }
  
          atexit(ofExitCallback);
  
          #ifdef WIN32_HIGH_RES_TIMING
                  timeBeginPeriod(1);                // ! experimental, sets high res time
                                                                  // you need to call timeEndPeriod.
                                                                  // if you quit the app other than "esc"
                                                                  // (ie, close the console, kill the process, etc)
                                                                  // at exit wont get called, and the time will
                                                                  // remain high res, that could mess things
                                                                  // up on your system.
                                                                  // info here:http://www.geisswerks.com/ryan/FAQS/timing.html
  
  	#endif
  
  	window->initializeWindow();
  
          ofSeedRandom();
          ofResetElapsedTimeCounter();
  
          window->runAppViaInfiniteLoop(OFSAptr);
  
  }
  
  //--------------------------------------
  int ofGetFrameNum(){
          return window->getFrameNum();
  }
  
  //--------------------------------------
  float ofGetFrameRate(){
          return window->getFrameRate();
  }
  
  //--------------------------------------
  void ofSetFrameRate(int targetRate){
  
          window->setFrameRate(targetRate);
  }
  
  //--------------------------------------
  void ofSleepMillis(int millis){
          #ifdef TARGET_WIN32
                  Sleep(millis);                        //windows sleep in milliseconds
          #else
                  usleep(millis * 1000);        //mac sleep in microseconds - cooler :)
          #endif
  }
  
  //--------------------------------------
  void ofHideCursor(){
          window->hideCursor();
  }
  
  //--------------------------------------
  void ofShowCursor(){
          window->showCursor();
  }
  
  //--------------------------------------
  void ofSetWindowPosition(int x, int y){
          window->setWindowPosition(x,y);
  }
  
  //--------------------------------------
  void ofSetWindowShape(int width, int height){
          window->setWindowShape(width, height);
  }
  
  //--------------------------------------
  int ofGetWindowPositionX(){
          return (int)window->getWindowPosition().x;
  }
  
  //--------------------------------------
  int ofGetWindowPositionY(){
          return (int)window->getWindowPosition().y;
  }
  
  //--------------------------------------
  int ofGetScreenWidth(){
          return (int)window->getScreenSize().x;
  }
  
  //--------------------------------------
  int ofGetScreenHeight(){
          return (int)window->getScreenSize().y;
  }
  
  //--------------------------------------------------
  int ofGetWidth(){
          return (int)window->getWindowSize().x;
  }
  //--------------------------------------------------
  int ofGetHeight(){
          return (int)window->getWindowSize().y;
  }
  
  //--------------------------------------
  void ofSetWindowTitle(string title){
          window->setWindowTitle(title);
  }
  
  //----------------------------------------------------------
  void ofEnableSetupScreen(){
          window->enableSetupScreen();
  }
  
  //----------------------------------------------------------
  void ofDisableSetupScreen(){
          window->disableSetupScreen();
  }
  
  //--------------------------------------
  void ofToggleFullscreen(){
          window->toggleFullscreen();
  }
  
  //--------------------------------------
  void ofSetFullscreen(bool fullscreen){
          window->setFullscreen(fullscreen);
  }
  
  //--------------------------------------
  int ofGetWindowMode(){
          return window->getWindowMode();
  }
  
  //--------------------------------------
  void ofSetVerticalSync(bool bSync){
          //----------------------------
          #ifdef TARGET_WIN32
          //----------------------------
                  if (bSync) {
                          if (GLEE_WGL_EXT_swap_control) wglSwapIntervalEXT (1);
                  } else {
                          if (GLEE_WGL_EXT_swap_control) wglSwapIntervalEXT (0);
                  }
          //----------------------------
          #endif
          //----------------------------
  
          //--------------------------------------
          #ifdef TARGET_OSX
          //--------------------------------------
                  GLint sync = bSync == true ? 1 : 0;
                  CGLSetParameter (CGLGetCurrentContext(), kCGLCPSwapInterval, &sync);
          //--------------------------------------
          #endif
          //--------------------------------------
  
          // linux ofSetVerticalSync needed -- anyone want to help w/ this?
          // http://www.inb.uni-luebeck.de/~boehme/xvideo_sync.html
  	// glXGetVideoSyncSGI(&count); // but needs to be at the end of every "draw?
          // also, see this:
             // glXWaitVideoSyncSGI(2,0,&count);
  }
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.