From 05a61ec6191b902ee22195bc44847e50af7509c9 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Wed, 13 Apr 2011 01:11:23 +0000 Subject: [PATCH] - client connected menu now uses same rendering as custom game menu for map preview (resulting in better fps there) --- .../menu/menu_state_connected_game.cpp | 38 +++++++++++++++++-- .../menu/menu_state_connected_game.h | 2 + .../menu/menu_state_custom_game.cpp | 2 +- source/shared_lib/include/map/map_preview.h | 2 + source/shared_lib/sources/map/map_preview.cpp | 2 + 5 files changed, 41 insertions(+), 5 deletions(-) diff --git a/source/glest_game/menu/menu_state_connected_game.cpp b/source/glest_game/menu/menu_state_connected_game.cpp index f60d0e85..82e8ec58 100644 --- a/source/glest_game/menu/menu_state_connected_game.cpp +++ b/source/glest_game/menu/menu_state_connected_game.cpp @@ -73,6 +73,7 @@ MenuStateConnectedGame::MenuStateConnectedGame(Program *program, MainMenu *mainM lastCheckedCRCTechtreeValue = -1; lastCheckedCRCMapValue = -1; + mapPreviewTexture=NULL; currentFactionLogo = ""; factionTexture=NULL; lastMissingMap=""; @@ -477,6 +478,8 @@ MenuStateConnectedGame::~MenuStateConnectedGame() { ftpClientThread = NULL; } } + + cleanupMapPreviewTexture(); } void MenuStateConnectedGame::mouseClick(int x, int y, MouseButton mouseButton){ @@ -796,6 +799,10 @@ void MenuStateConnectedGame::render() { //renderer.renderTextureQuad(60+575+80,365,200,225,factionTexture,1); renderer.renderTextureQuad(800,600,200,150,factionTexture,1); } + if(mapPreviewTexture != NULL) { + renderer.renderTextureQuad(5,185,150,150,mapPreviewTexture,1.0f); + //printf("=================> Rendering map preview texture\n"); + } renderer.renderButton(&buttonDisconnect); @@ -951,9 +958,11 @@ void MenuStateConnectedGame::render() { int mouseY = mainMenu->getMouseY(); int mouse2dAnim = mainMenu->getMouse2dAnim(); - renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim); - bool renderAll = (listBoxFogOfWar.getSelectedItemIndex() == 2); - renderer.renderMapPreview(&mapPreview, renderAll, 10, 350); + if(mapPreviewTexture == NULL) { + renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim); + bool renderAll = (listBoxFogOfWar.getSelectedItemIndex() == 2); + renderer.renderMapPreview(&mapPreview, renderAll, 10, 350, &mapPreviewTexture); + } } renderer.renderChatManager(&chatManager); renderer.renderConsole(&console,showFullConsole,true); @@ -2090,12 +2099,16 @@ bool MenuStateConnectedGame::loadMapInfo(string file, MapInfo *mapInfo, bool loa // Not painting properly so this is on hold if(loadMapPreview == true) { if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); - mapPreview.loadFromFile(file.c_str()); + if(mapPreview.getMapFileLoaded() != file) { + mapPreview.loadFromFile(file.c_str()); + cleanupMapPreviewTexture(); + } } mapLoaded = true; } else { + cleanupMapPreviewTexture(); mapInfo->desc = ITEM_MISSING; NetworkManager &networkManager= NetworkManager::getInstance(); @@ -2180,6 +2193,23 @@ int32 MenuStateConnectedGame::getNetworkPlayerStatus() { return result; } +void MenuStateConnectedGame::cleanupMapPreviewTexture() { + if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + + //printf("CLEANUP map preview texture\n"); + + if(mapPreviewTexture != NULL) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + + mapPreviewTexture->end(); + + if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + delete mapPreviewTexture; + mapPreviewTexture = NULL; + } + if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); +} + void MenuStateConnectedGame::FTPClient_CallbackEvent(string itemName, FTP_Client_CallbackType type, pair result, void *userdata) { if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); diff --git a/source/glest_game/menu/menu_state_connected_game.h b/source/glest_game/menu/menu_state_connected_game.h index 3d233c55..c21001a1 100644 --- a/source/glest_game/menu/menu_state_connected_game.h +++ b/source/glest_game/menu/menu_state_connected_game.h @@ -98,6 +98,7 @@ private: GraphicLabel labelDataSynchInfo; MapInfo mapInfo; + Texture2D *mapPreviewTexture; bool needToSetChangedGameSettings; time_t lastSetChangedGameSettings; @@ -200,6 +201,7 @@ private: FTP_Client_CallbackType type, pair result,void *userdata); int32 getNetworkPlayerStatus(); + void cleanupMapPreviewTexture(); }; }}//end namespace diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index 31b79bbc..a9782532 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -1391,9 +1391,9 @@ void MenuStateCustomGame::render() { int mouse2dAnim = mainMenu->getMouse2dAnim(); renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim); - bool renderAll = (listBoxFogOfWar.getSelectedItemIndex() == 2); if(mapPreviewTexture == NULL) { + bool renderAll = (listBoxFogOfWar.getSelectedItemIndex() == 2); //printf("=================> Rendering map preview into a texture BEFORE (%p)\n", mapPreviewTexture); renderer.renderMapPreview(&mapPreview, renderAll, 10, 350,&mapPreviewTexture); //printf("=================> Rendering map preview into a texture AFTER (%p)\n", mapPreviewTexture); diff --git a/source/shared_lib/include/map/map_preview.h b/source/shared_lib/include/map/map_preview.h index 5024f2dc..d9b05655 100644 --- a/source/shared_lib/include/map/map_preview.h +++ b/source/shared_lib/include/map/map_preview.h @@ -124,6 +124,7 @@ private: int refAlt; bool fileLoaded; + string mapFileLoaded; public: MapPreview(); @@ -186,6 +187,7 @@ public: void applyNewHeight(float newHeight, int x, int y, int strenght); bool hasFileLoaded() const {return fileLoaded;} + string getMapFileLoaded() const { return mapFileLoaded; } }; }}// end namespace diff --git a/source/shared_lib/sources/map/map_preview.cpp b/source/shared_lib/sources/map/map_preview.cpp index 761f69ea..68dbcc8b 100644 --- a/source/shared_lib/sources/map/map_preview.cpp +++ b/source/shared_lib/sources/map/map_preview.cpp @@ -28,6 +28,7 @@ namespace Shared { namespace Map { // ================== PUBLIC ===================== MapPreview::MapPreview() { + mapFileLoaded = ""; fileLoaded = false; heightFactor = DEFAULT_MAP_CELL_HEIGHT_FACTOR; waterLevel = DEFAULT_MAP_WATER_DEPTH; @@ -741,6 +742,7 @@ void MapPreview::loadFromFile(const string &path) { fclose(f1); fileLoaded = true; + mapFileLoaded = path; } else { throw runtime_error("error opening map file: " + path);