topical media & game development
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.