From cb52b4895d7b7772685383f1793e8568c1e5beb2 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Tue, 2 Nov 2010 19:52:20 +0000 Subject: [PATCH] - performance fix in both pathfinder and debug output when pressing the debug key --- source/glest_game/ai/path_finder.cpp | 22 ++++++++-------- source/glest_game/graphics/renderer.cpp | 35 ++++++++++++++++++------- source/glest_game/graphics/renderer.h | 2 ++ 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/source/glest_game/ai/path_finder.cpp b/source/glest_game/ai/path_finder.cpp index 96805a1d..60841d86 100644 --- a/source/glest_game/ai/path_finder.cpp +++ b/source/glest_game/ai/path_finder.cpp @@ -371,7 +371,7 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout //if(chrono.getMillis() > 0) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s Line: %d] took msecs: %lld\n",__FILE__,__FUNCTION__,__LINE__,chrono.getMillis()); // This cache stores the units free cell movement calcs during the looping below - std::map > localCacheForUnitCellMovement; + //std::map > localCacheForUnitCellMovement; int whileLoopCount = 0; while(nodeLimitReached == false) { whileLoopCount++; @@ -406,17 +406,17 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout Vec2i sucPos= node->pos + Vec2i(i, j); bool canUnitMoveToCell = false; - std::map >::iterator iterFind = localCacheForUnitCellMovement.find(node->pos); - if(iterFind != localCacheForUnitCellMovement.end() && - iterFind->second.find(sucPos) != iterFind->second.end()) { - canUnitMoveToCell = iterFind->second.find(sucPos)->second; - } - else { + //std::map >::iterator iterFind = localCacheForUnitCellMovement.find(node->pos); + //if(iterFind != localCacheForUnitCellMovement.end() && + // iterFind->second.find(sucPos) != iterFind->second.end()) { + // canUnitMoveToCell = iterFind->second.find(sucPos)->second; + //} + //else { canUnitMoveToCell = map->aproxCanMove(unit, node->pos, sucPos); - if(Config::getInstance().getBool("DisableCaching","false") == false) { - localCacheForUnitCellMovement[node->pos][sucPos] = canUnitMoveToCell; - } - } + //if(Config::getInstance().getBool("DisableCaching","false") == false) { + // localCacheForUnitCellMovement[node->pos][sucPos] = canUnitMoveToCell; + //} + //} if(openPos(sucPos) == false && canUnitMoveToCell == true) { //if node is not open and canMove then generate another node diff --git a/source/glest_game/graphics/renderer.cpp b/source/glest_game/graphics/renderer.cpp index 140dfe1d..122e9edf 100644 --- a/source/glest_game/graphics/renderer.cpp +++ b/source/glest_game/graphics/renderer.cpp @@ -313,6 +313,7 @@ void Renderer::initGame(const Game *game){ SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); this->game= game; + worldToScreenPosCache.clear(); //check gl caps checkGlOptionalCaps(); @@ -433,7 +434,7 @@ void Renderer::end(){ glDeleteLists(list2d, 1); } -void Renderer::endGame(){ +void Renderer::endGame() { game= NULL; //delete resources @@ -447,6 +448,8 @@ void Renderer::endGame(){ } glDeleteLists(list3d, 1); + + worldToScreenPosCache.clear(); } void Renderer::endMenu(){ @@ -1933,10 +1936,10 @@ void Renderer::renderUnits(const int renderFps) { unit->setScreenPos(computeScreenPosition(unit->getCurrVectorFlat())); visibleFrameUnitList.push_back(unit); - if(allowRenderUnitTitles == true) { + //if(allowRenderUnitTitles == true) { // Add to the pending render unit title list - renderUnitTitleList.push_back(std::pair(unit,computeScreenPosition(unit->getCurrVectorFlat())) ); - } + //renderUnitTitleList.push_back(std::pair(unit,computeScreenPosition(unit->getCurrVectorFlat())) ); + //} } if(modelRenderStarted == true) { @@ -2016,10 +2019,10 @@ void Renderer::renderUnits(const int renderFps) { unit->setScreenPos(computeScreenPosition(unit->getCurrVectorFlat())); visibleFrameUnitList.push_back(unit); - if(allowRenderUnitTitles == true) { + //if(allowRenderUnitTitles == true) { // Add to the pending render unit title list - renderUnitTitleList.push_back(std::pair(unit,computeScreenPosition(unit->getCurrVectorFlat())) ); - } + //renderUnitTitleList.push_back(std::pair(unit,computeScreenPosition(unit->getCurrVectorFlat())) ); + //} } else { @@ -2640,6 +2643,9 @@ bool Renderer::computePosition(const Vec2i &screenPos, Vec2i &worldPos){ // This method takes world co-ordinates and translates them to screen co-ords Vec3f Renderer::computeScreenPosition(const Vec3f &worldPos) { + if(worldToScreenPosCache.find(worldPos) != worldToScreenPosCache.end()) { + return worldToScreenPosCache[worldPos]; + } assertGl(); const Metrics &metrics= Metrics::getInstance(); @@ -2667,6 +2673,8 @@ Vec3f Renderer::computeScreenPosition(const Vec3f &worldPos) { &screenX, &screenY, &screenZ); Vec3f screenPos(screenX,screenY,screenZ); + worldToScreenPosCache[worldPos]=screenPos; + return screenPos; } @@ -3923,9 +3931,9 @@ Texture2D::Filter Renderer::strToTextureFilter(const string &s){ void Renderer::setAllowRenderUnitTitles(bool value) { allowRenderUnitTitles = value; - if(allowRenderUnitTitles == false) { - renderUnitTitleList.clear(); - } + //if(allowRenderUnitTitles == false) { + //renderUnitTitleList.clear(); + //} } // This method renders titles for units @@ -3943,10 +3951,16 @@ void Renderer::renderUnitTitles(Font2D *font, Vec3f color) { unitRenderedList[unit->getId()] = true; } + else { + string str = unit->getFullName() + " - " + intToStr(unit->getId()); + Vec3f screenPos = unit->getScreenPos(); + renderText(str, font, color, fabs(screenPos.x) + 5, fabs(screenPos.y) + 5, false); + } } visibleFrameUnitList.clear(); } + /* if(renderUnitTitleList.size() > 0) { for(int idx = 0; idx < renderUnitTitleList.size(); idx++) { std::pair &unitInfo = renderUnitTitleList[idx]; @@ -3965,6 +3979,7 @@ void Renderer::renderUnitTitles(Font2D *font, Vec3f color) { } renderUnitTitleList.clear(); } + */ } void Renderer::setQuadCacheDirty(bool value) { diff --git a/source/glest_game/graphics/renderer.h b/source/glest_game/graphics/renderer.h index 3b82daa2..46045b93 100644 --- a/source/glest_game/graphics/renderer.h +++ b/source/glest_game/graphics/renderer.h @@ -248,6 +248,8 @@ private: Mutex saveScreenShotThreadAccessor; std::list > saveScreenQueue; + std::map worldToScreenPosCache; + private: Renderer(); ~Renderer();