From 04e16819aa489b3311ce92b7caf049d33dbc7a41 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Sat, 3 Mar 2012 18:40:18 +0000 Subject: [PATCH] - fix segfault when converting models - fix segfault when mod menu cannot connect to masterserver --- source/glest_game/graphics/renderer.cpp | 13 +++---- source/glest_game/main/main.cpp | 42 ++++++++++++++++------ source/glest_game/menu/menu_state_mods.cpp | 9 ++--- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/source/glest_game/graphics/renderer.cpp b/source/glest_game/graphics/renderer.cpp index 8c05dda6..d1cadd24 100644 --- a/source/glest_game/graphics/renderer.cpp +++ b/source/glest_game/graphics/renderer.cpp @@ -2228,13 +2228,14 @@ void Renderer::renderSelectionQuad() { Vec2i computeCenteredPos(const string &text, Font2D *font, int x, int y) { if(font == NULL) { - throw runtime_error("font == NULL"); + //abort(); + throw runtime_error("font == NULL (1)"); } const Metrics &metrics= Metrics::getInstance(); FontMetrics *fontMetrics= font->getMetrics(); if(fontMetrics == NULL) { - throw runtime_error("fontMetrics == NULL"); + throw runtime_error("fontMetrics == NULL (1)"); } int virtualX = (fontMetrics->getTextWidth(text) > 0 ? static_cast(fontMetrics->getTextWidth(text)/2.f) : 5); @@ -2251,13 +2252,13 @@ Vec2i computeCenteredPos(const string &text, Font2D *font, int x, int y) { Vec2i computeCenteredPos(const string &text, Font3D *font, int x, int y) { if(font == NULL) { - throw runtime_error("font == NULL"); + throw runtime_error("font == NULL (2)"); } const Metrics &metrics= Metrics::getInstance(); FontMetrics *fontMetrics= font->getMetrics(); if(fontMetrics == NULL) { - throw runtime_error("fontMetrics == NULL"); + throw runtime_error("fontMetrics == NULL (2)"); } int virtualX = (fontMetrics->getTextWidth(text) > 0 ? static_cast(fontMetrics->getTextWidth(text) / 2.f) : 5); @@ -2525,7 +2526,7 @@ void Renderer::renderTextShadow3D(const string &text, Font3D *font,const Vec4f & } if(font == NULL) { - throw runtime_error("font == NULL"); + throw runtime_error("font == NULL (3)"); } glPushAttrib(GL_CURRENT_BIT); @@ -2554,7 +2555,7 @@ void Renderer::renderTextShadow(const string &text, Font2D *font,const Vec4f &co } if(font == NULL) { - throw runtime_error("font == NULL"); + throw runtime_error("font == NULL (4)"); } glPushAttrib(GL_CURRENT_BIT); diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index f8ed75c1..3a940909 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -3397,6 +3397,8 @@ int glestMain(int argc, char** argv) { printf("About to convert using keepsmallest = %d\n",keepsmallest); } + //CoreData::getInstance().load(); + showCursor(true); mainWindow->setUseDefaultCursorOnly(true); @@ -3404,11 +3406,21 @@ int glestMain(int argc, char** argv) { renderer.clearBuffers(); renderer.clearZBuffer(); renderer.reset2d(); - renderer.renderText( - "Please wait, converting models...", - CoreData::getInstance().getMenuFontBig(), - Vec3f(1.f, 1.f, 0.f), (metrics.getScreenW() / 2) - 400, - (metrics.getScreenH() / 2), true); + + if(CoreData::getInstance().getMenuFontBig3D() != NULL) { + renderer.renderText3D( + "Please wait, converting models...", + CoreData::getInstance().getMenuFontBig3D(), + Vec3f(1.f, 1.f, 0.f), (metrics.getScreenW() / 2) - 400, + (metrics.getScreenH() / 2), true); + } + else { + renderer.renderText( + "Please wait, converting models...", + CoreData::getInstance().getMenuFontBig(), + Vec3f(1.f, 1.f, 0.f), (metrics.getScreenW() / 2) - 400, + (metrics.getScreenH() / 2), true); + } renderer.swapBuffers(); std::vector models; @@ -3432,11 +3444,21 @@ int glestMain(int argc, char** argv) { renderer.clearZBuffer(); renderer.reset2d(); sprintf(szTextBuf,"Please wait, converting models [%d of %lu] ...",i,(long int)models.size()); - renderer.renderText( - szTextBuf, - CoreData::getInstance().getMenuFontBig(), - Vec3f(1.f, 1.f, 0.f), (metrics.getScreenW() / 2) - 400, - (metrics.getScreenH() / 2), true); + + if(CoreData::getInstance().getMenuFontBig3D() != NULL) { + renderer.renderText3D( + szTextBuf, + CoreData::getInstance().getMenuFontBig3D(), + Vec3f(1.f, 1.f, 0.f), (metrics.getScreenW() / 2) - 400, + (metrics.getScreenH() / 2), true); + } + else { + renderer.renderText( + szTextBuf, + CoreData::getInstance().getMenuFontBig(), + Vec3f(1.f, 1.f, 0.f), (metrics.getScreenW() / 2) - 400, + (metrics.getScreenH() / 2), true); + } renderer.swapBuffers(); sleep(0); diff --git a/source/glest_game/menu/menu_state_mods.cpp b/source/glest_game/menu/menu_state_mods.cpp index 96a27212..2ebee746 100644 --- a/source/glest_game/menu/menu_state_mods.cpp +++ b/source/glest_game/menu/menu_state_mods.cpp @@ -851,7 +851,7 @@ void MenuStateMods::getTechsLocalList() { string MenuStateMods::refreshTechModInfo(string techInfo) { std::vector techInfoList; Tokenize(techInfo,techInfoList,"|"); - if(techInfoList.size() >= 5) { + if(techInfoList.size() >= 6) { Config &config = Config::getInstance(); ModInfo modinfo; modinfo.name = techInfoList[0]; @@ -861,6 +861,7 @@ string MenuStateMods::refreshTechModInfo(string techInfo) { modinfo.url = techInfoList[4]; modinfo.imageUrl = techInfoList[5]; modinfo.type = mt_Techtree; + string itemPath = config.getPathListForType(ptTechs,"")[1] + "/" + modinfo.name + string("/*"); if(itemPath.empty()==false){ bool forceRefresh = (mapCRCUpdateList.find(itemPath) == mapCRCUpdateList.end()); @@ -901,7 +902,7 @@ void MenuStateMods::getTilesetsLocalList() { string MenuStateMods::refreshTilesetModInfo(string tilesetInfo) { std::vector tilesetInfoList; Tokenize(tilesetInfo,tilesetInfoList,"|"); - if(tilesetInfoList.size() >= 4) { + if(tilesetInfoList.size() >= 5) { Config &config = Config::getInstance(); ModInfo modinfo; modinfo.name = tilesetInfoList[0]; @@ -990,7 +991,7 @@ void MenuStateMods::getMapsLocalList() { string MenuStateMods::refreshMapModInfo(string mapInfo) { std::vector mapInfoList; Tokenize(mapInfo,mapInfoList,"|"); - if(mapInfoList.size() >= 5) { + if(mapInfoList.size() >= 6) { //Config &config = Config::getInstance(); ModInfo modinfo; modinfo.name = mapInfoList[0]; @@ -1052,7 +1053,7 @@ void MenuStateMods::getScenariosLocalList() { string MenuStateMods::refreshScenarioModInfo(string scenarioInfo) { std::vector scenarioInfoList; Tokenize(scenarioInfo,scenarioInfoList,"|"); - if(scenarioInfoList.size() >= 4) { + if(scenarioInfoList.size() >= 5) { Config &config = Config::getInstance(); ModInfo modinfo; modinfo.name = scenarioInfoList[0];