diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 586cdbc0e..a82324316 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -58,7 +58,7 @@ public: } static void handleRuntimeError(const char *msg) { - SystemFlags::OutputDebug(SystemFlags::debugSystem,"%s\n",msg); + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] %s\n",__FILE__,__FUNCTION__,__LINE__,msg); Program *program = Program::getInstance(); if(program && gameInitialized == true) { @@ -74,6 +74,7 @@ public: } static int DisplayMessage(const char *msg, bool exitApp) { + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] %s\n",__FILE__,__FUNCTION__,__LINE__,msg); Program *program = Program::getInstance(); if(program && gameInitialized == true) { @@ -318,6 +319,18 @@ int glestMain(int argc, char** argv){ //exceptionMessage(e); ExceptionHandler::handleRuntimeError(e.what()); } + catch(const char *e){ + //exceptionMessage(e); + ExceptionHandler::handleRuntimeError(e); + } + catch(const string &ex){ + //exceptionMessage(e); + ExceptionHandler::handleRuntimeError(ex.c_str()); + } + catch(...){ + //exceptionMessage(e); + ExceptionHandler::handleRuntimeError("Unknown error!"); + } //SoundRenderer &soundRenderer= SoundRenderer::getInstance(); //soundRenderer.stopAllSounds(); diff --git a/source/shared_lib/sources/graphics/gl/texture_gl.cpp b/source/shared_lib/sources/graphics/gl/texture_gl.cpp index 932c72707..9ce243ed8 100644 --- a/source/shared_lib/sources/graphics/gl/texture_gl.cpp +++ b/source/shared_lib/sources/graphics/gl/texture_gl.cpp @@ -234,6 +234,9 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy){ 0, glFormat, GL_UNSIGNED_BYTE, pixels); GLint error= glGetError(); + + //throw runtime_error("TEST!"); + if(error!=GL_NO_ERROR){ char szBuf[1024]=""; sprintf(szBuf,"Error creating texture 2D, returned: %d [%s] w = %d, h = %d, glInternalFormat = %d, glFormat = %d",error,pixmap.getPath().c_str(),pixmap.getW(),pixmap.getH(),glInternalFormat,glFormat); diff --git a/source/shared_lib/sources/platform/sdl/window.cpp b/source/shared_lib/sources/platform/sdl/window.cpp index 008d6fbaf..0cfacc9b8 100644 --- a/source/shared_lib/sources/platform/sdl/window.cpp +++ b/source/shared_lib/sources/platform/sdl/window.cpp @@ -66,49 +66,49 @@ bool Window::handleEvent() { while(SDL_PollEvent(&event)) { try { - //printf("START [%d]\n",event.type); + //printf("START [%d]\n",event.type); - switch(event.type) { - case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEBUTTONUP: - case SDL_MOUSEMOTION: + switch(event.type) { + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + case SDL_MOUSEMOTION: - //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); - setLastMouseEvent(Chrono::getCurMillis()); - setMousePos(Vec2i(event.button.x, event.button.y)); - break; - } + //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); + setLastMouseEvent(Chrono::getCurMillis()); + setMousePos(Vec2i(event.button.x, event.button.y)); + break; + } switch(event.type) { case SDL_QUIT: - //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); + //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); return false; case SDL_MOUSEBUTTONDOWN: - //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); - if(global_window) { - global_window->handleMouseDown(event); - } + //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); + if(global_window) { + global_window->handleMouseDown(event); + } break; case SDL_MOUSEBUTTONUP: { - //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); - if(global_window) { - MouseButton b = getMouseButton(event.button.button); - setMouseState(b, false); + //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); + if(global_window) { + MouseButton b = getMouseButton(event.button.button); + setMouseState(b, false); - global_window->eventMouseUp(event.button.x, + global_window->eventMouseUp(event.button.x, event.button.y,getMouseButton(event.button.button)); - } + } break; } case SDL_MOUSEMOTION: { - //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); + //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); //MouseState ms; //ms.leftMouse = (event.motion.state & SDL_BUTTON_LMASK) != 0; //ms.rightMouse = (event.motion.state & SDL_BUTTON_RMASK) != 0; //ms.centerMouse = (event.motion.state & SDL_BUTTON_MMASK) != 0; - setMouseState(mbLeft, event.motion.state & SDL_BUTTON_LMASK); - setMouseState(mbRight, event.motion.state & SDL_BUTTON_RMASK); - setMouseState(mbCenter, event.motion.state & SDL_BUTTON_MMASK); + setMouseState(mbLeft, event.motion.state & SDL_BUTTON_LMASK); + setMouseState(mbRight, event.motion.state & SDL_BUTTON_RMASK); + setMouseState(mbCenter, event.motion.state & SDL_BUTTON_MMASK); if(global_window) { global_window->eventMouseMove(event.motion.x, event.motion.y, &getMouseState()); //&ms); @@ -116,7 +116,7 @@ bool Window::handleEvent() { break; } case SDL_KEYDOWN: - //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); + //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); Window::isKeyPressedDown = true; keystate = event.key.keysym; @@ -128,23 +128,30 @@ bool Window::handleEvent() { } if(global_window) { SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); - global_window->eventKeyDown(getKey(event.key.keysym)); - global_window->eventKeyPress(static_cast(event.key.keysym.unicode)); + global_window->eventKeyDown(getKey(event.key.keysym)); + global_window->eventKeyPress(static_cast(event.key.keysym.unicode)); } break; case SDL_KEYUP: - //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); + //printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__); Window::isKeyPressedDown = false; keystate = event.key.keysym; - if(global_window) { - global_window->eventKeyUp(getKey(event.key.keysym)); - } + if(global_window) { + global_window->eventKeyUp(getKey(event.key.keysym)); + } break; } - } catch(std::exception& e) { - std::cerr << "Couldn't process event: " << e.what() << "\n"; + } + catch(std::runtime_error& e) { + std::cerr << "(a) Couldn't process event: " << e.what() << "\n"; + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d] (a) Couldn't process event: [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what()); + throw runtime_error(e.what()); + } + catch(std::exception& e) { + std::cerr << "(b) Couldn't process event: " << e.what() << "\n"; + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d] (b) Couldn't process event: [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what()); } } diff --git a/source/shared_lib/sources/platform/win32/platform_util.cpp b/source/shared_lib/sources/platform/win32/platform_util.cpp index c7ea84b6e..cc1d38368 100644 --- a/source/shared_lib/sources/platform/win32/platform_util.cpp +++ b/source/shared_lib/sources/platform/win32/platform_util.cpp @@ -149,6 +149,8 @@ PlatformExceptionHandler *PlatformExceptionHandler::thisPointer= NULL; LONG WINAPI PlatformExceptionHandler::handler(LPEXCEPTION_POINTERS pointers){ + //printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + HANDLE hFile = CreateFile( thisPointer->dumpFileName.c_str(), GENERIC_WRITE, @@ -158,6 +160,8 @@ LONG WINAPI PlatformExceptionHandler::handler(LPEXCEPTION_POINTERS pointers){ FILE_ATTRIBUTE_NORMAL, 0); + //printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + MINIDUMP_EXCEPTION_INFORMATION lExceptionInformation; lExceptionInformation.ThreadId= GetCurrentThreadId(); @@ -173,8 +177,12 @@ LONG WINAPI PlatformExceptionHandler::handler(LPEXCEPTION_POINTERS pointers){ NULL, NULL ); + //printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + thisPointer->handle(); + //printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + return EXCEPTION_EXECUTE_HANDLER; }