diff --git a/source/glest_game/graphics/renderer.cpp b/source/glest_game/graphics/renderer.cpp index e8523bda..387883c8 100644 --- a/source/glest_game/graphics/renderer.cpp +++ b/source/glest_game/graphics/renderer.cpp @@ -7589,12 +7589,12 @@ void Renderer::checkGlCaps() { if(glActiveTexture == NULL) { string message; - message += "Your system supports OpenGL version \""; - message += getGlVersion() + string("\"\n"); + message += "Your system supports OpenGL version ["; + message += getGlVersion() + string("]\n"); message += "MegaGlest needs a version that supports\n"; message += "glActiveTexture (OpenGL 1.3) or the ARB_multitexture extension."; - throw megaglest_runtime_error(message.c_str()); + throw megaglest_runtime_error(message.c_str(),true); } //opengl 1.3 @@ -7602,12 +7602,12 @@ void Renderer::checkGlCaps() { if(glewIsSupported("GL_VERSION_1_3") == false) { string message; - message += "Your system supports OpenGL version \""; - message += getGlVersion() + string("\"\n"); + message += "Your system supports OpenGL version ["; + message += getGlVersion() + string("]\n"); message += "MegaGlest needs at least version 1.3 to work\n"; message += "You may solve this problem by installing your latest video card drivers"; - throw megaglest_runtime_error(message.c_str()); + throw megaglest_runtime_error(message.c_str(),true); } //opengl 1.4 or extension diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 037492b0..7cb2686c 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -5431,9 +5431,18 @@ int glestMain(int argc, char** argv) { soundRenderer.stopAllSounds(shutdownFadeSoundMilliseconds); chronoshutdownFadeSound.start(); } + if(program != NULL && + program->getTryingRendererInit() == true && + program->getRendererInitOk() == false) { + message(e.what()); + } } - ExceptionHandler::handleRuntimeError(e); + if(program == NULL || program->getTryingRendererInit() == false || + (program->getTryingRendererInit() == true && + program->getRendererInitOk() == true)) { + ExceptionHandler::handleRuntimeError(e); + } } catch(const exception &e) { if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == false) { diff --git a/source/glest_game/main/program.cpp b/source/glest_game/main/program.cpp index 0b23487a..46b579d2 100644 --- a/source/glest_game/main/program.cpp +++ b/source/glest_game/main/program.cpp @@ -172,6 +172,9 @@ void Program::ShowMessageProgramState::update() { // ===================== PUBLIC ======================== +bool Program::rendererInitOk = false; +bool Program::tryingRendererInit = false; + Program::Program() { //this->masterserverMode = false; this->window = NULL; @@ -785,7 +788,10 @@ void Program::init(WindowGl *window, bool initSound, bool toggleFullScreen){ if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__); //init renderer (load global textures) + tryingRendererInit = true; renderer.init(); + tryingRendererInit = false; + rendererInitOk = true; if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__); diff --git a/source/glest_game/main/program.h b/source/glest_game/main/program.h index c10aca13..352e6793 100644 --- a/source/glest_game/main/program.h +++ b/source/glest_game/main/program.h @@ -159,11 +159,17 @@ private: bool shutdownApplicationEnabled; static bool wantShutdownApplicationAfterGame; + static bool tryingRendererInit; + static bool rendererInitOk; + public: Program(); virtual ~Program(); - static Program *getInstance() {return singleton;} + static bool getTryingRendererInit() { return tryingRendererInit; } + static bool getRendererInitOk() { return rendererInitOk; } + + static Program *getInstance() { return singleton; } static void setWantShutdownApplicationAfterGame(bool value) { wantShutdownApplicationAfterGame = value; } static bool getWantShutdownApplicationAfterGame() { return wantShutdownApplicationAfterGame; } diff --git a/source/shared_lib/sources/platform/sdl/platform_util.cpp b/source/shared_lib/sources/platform/sdl/platform_util.cpp index ae58caf0..d3757c89 100644 --- a/source/shared_lib/sources/platform/sdl/platform_util.cpp +++ b/source/shared_lib/sources/platform/sdl/platform_util.cpp @@ -33,7 +33,54 @@ namespace Shared{ namespace Platform{ string PlatformExceptionHandler::application_binary=""; bool PlatformExceptionHandler::disableBacktrace = false; +const char * getDialogCommand() { + +/* + if (::system(NULL)) { + if (::system("which gdialog") == 0) + return "gdialog"; + else if (::system("which kdialog") == 0) + return "kdialog"; + } +*/ + + FILE *file = popen("which gdialog","r"); + //printf("File #1 [%p]\n",file); + if (file != NULL) { + pclose(file); + return "gdialog"; + } + file = popen("which kdialog","r"); + //printf("File #2 [%p]\n",file); + if (file != NULL) { + pclose(file); + return "kdialog"; + } + + return NULL; +} + +bool showMessage(const std::string & warning) { + bool guiMessage = false; + const char * dialogCommand = getDialogCommand(); + if (dialogCommand) { + std::string command = dialogCommand; + command += " --title \"Error\" --msgbox \"`printf \"" + warning + "\"`\""; + + //printf("\n\n\nzenity command [%s]\n\n\n",command.c_str()); + + FILE *fp = popen(command.c_str(),"r"); + if (fp != 0) + guiMessage = true; + pclose(fp); + } + + return guiMessage; +} + void message(string message) { + showMessage(message); + std::cerr << "******************************************************\n"; std::cerr << " " << message << "\n"; std::cerr << "******************************************************\n"; @@ -47,6 +94,8 @@ bool ask(string message) { } void exceptionMessage(const exception &excp) { + //showMessage(excp.what()); + std::cerr << "Exception: " << excp.what() << std::endl; }