Hey, To cut a long story short, dunelegacy was sometimes slow on OpenBSD. The following diff taken from upstream fixes this.
Full bug report and comms: http://sourceforge.net/p/dunelegacy/bugs/48/ OK? Index: Makefile =================================================================== RCS file: /home/edd/cvsync/ports/games/dunelegacy/Makefile,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 Makefile --- Makefile 29 May 2014 08:31:26 -0000 1.1.1.1 +++ Makefile 17 Aug 2014 19:47:46 -0000 @@ -4,6 +4,7 @@ COMMENT = improved opensource version o DISTNAME = dunelegacy-0.96.3-src PKGNAME = ${DISTNAME:S/-src//} +REVISION = 0 CATEGORIES = games x11 Index: patches/patch-include_FileClasses_GFXManager_h =================================================================== RCS file: patches/patch-include_FileClasses_GFXManager_h diff -N patches/patch-include_FileClasses_GFXManager_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-include_FileClasses_GFXManager_h 17 Aug 2014 19:47:24 -0000 @@ -0,0 +1,15 @@ +$OpenBSD$ + +Fog of war performance fix. +from upstream: a141e80fa4b5d374b34037d74526f09b09a93581 + +--- include/FileClasses/GFXManager.h.orig Tue Jan 1 23:49:57 2013 ++++ include/FileClasses/GFXManager.h Sun Aug 17 20:40:32 2014 +@@ -102,6 +102,7 @@ typedef enum { + ObjPic_RockDamage, + ObjPic_SandDamage, + ObjPic_Terrain_Hidden, ++ ObjPic_Terrain_HiddenFog, + ObjPic_Terrain_Tracks, + ObjPic_Star, + NUM_OBJPICS Index: patches/patch-src_FileClasses_GFXManager_cpp =================================================================== RCS file: patches/patch-src_FileClasses_GFXManager_cpp diff -N patches/patch-src_FileClasses_GFXManager_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_FileClasses_GFXManager_cpp 17 Aug 2014 19:43:57 -0000 @@ -0,0 +1,18 @@ +$OpenBSD$ + +Fog of war performance fix. +from upstream: a141e80fa4b5d374b34037d74526f09b09a93581 + +--- src/FileClasses/GFXManager.cpp.orig Sun Feb 24 18:34:09 2013 ++++ src/FileClasses/GFXManager.cpp Sun Aug 17 20:40:32 2014 +@@ -413,6 +413,10 @@ GFXManager::GFXManager() { + objPic[ObjPic_Terrain_Hidden][HOUSE_HARKONNEN][1] = Scaler::defaultDoubleTiledSurface(objPic[ObjPic_Terrain_Hidden][HOUSE_HARKONNEN][0], 16, 1, false); + objPic[ObjPic_Terrain_Hidden][HOUSE_HARKONNEN][2] = Scaler::defaultTripleTiledSurface(objPic[ObjPic_Terrain_Hidden][HOUSE_HARKONNEN][0], 16, 1, false); + ++ objPic[ObjPic_Terrain_HiddenFog][HOUSE_HARKONNEN][0] = icon->getPictureRow(108,123); ++ objPic[ObjPic_Terrain_HiddenFog][HOUSE_HARKONNEN][1] = Scaler::defaultDoubleTiledSurface(objPic[ObjPic_Terrain_HiddenFog][HOUSE_HARKONNEN][0], 16, 1, false); ++ objPic[ObjPic_Terrain_HiddenFog][HOUSE_HARKONNEN][2] = Scaler::defaultTripleTiledSurface(objPic[ObjPic_Terrain_HiddenFog][HOUSE_HARKONNEN][0], 16, 1, false); ++ + objPic[ObjPic_Terrain_Tracks][HOUSE_HARKONNEN][0] = icon->getPictureRow(25,32); + objPic[ObjPic_Terrain_Tracks][HOUSE_HARKONNEN][1] = Scaler::defaultDoubleTiledSurface(objPic[ObjPic_Terrain_Tracks][HOUSE_HARKONNEN][0], 8, 1, false); + objPic[ObjPic_Terrain_Tracks][HOUSE_HARKONNEN][2] = Scaler::defaultTripleTiledSurface(objPic[ObjPic_Terrain_Tracks][HOUSE_HARKONNEN][0], 8, 1, false); Index: patches/patch-src_Game_cpp =================================================================== RCS file: /home/edd/cvsync/ports/games/dunelegacy/patches/patch-src_Game_cpp,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 patch-src_Game_cpp --- patches/patch-src_Game_cpp 29 May 2014 08:31:26 -0000 1.1.1.1 +++ patches/patch-src_Game_cpp 17 Aug 2014 19:44:46 -0000 @@ -3,114 +3,57 @@ $OpenBSD: patch-src_Game_cpp,v 1.1.1.1 2 Additional construction yard and factory keybindings. From upstream: 319cb3491ffbdfb9763fd8c3b9a71319d5595dec ---- src/Game.cpp.orig Tue Feb 26 02:49:37 2013 -+++ src/Game.cpp Mon May 26 08:43:56 2014 -@@ -922,8 +922,6 @@ void Game::doInput() +Fog of war performance fix. +from upstream: a141e80fa4b5d374b34037d74526f09b09a93581 + +--- src/Game.cpp.orig Sun Aug 17 20:38:30 2014 ++++ src/Game.cpp Sun Aug 17 20:40:32 2014 +@@ -17,7 +17,7 @@ + + #include <Game.h> + +-#include <globals.h> ++#include <globals.h> + #include <config.h> + + #include <FileClasses/FileManager.h> +@@ -446,6 +446,9 @@ void Game::drawScreen() + //////////////////////////////draw unexplored/shade + + if(debug == false) { ++ SDL_Surface** hiddenFogSurf = pGFXManager->getObjPic(ObjPic_Terrain_HiddenFog); ++ SDL_LockSurface(hiddenFogSurf[currentZoomlevel]); ++ + int zoomedTileSize = world2zoomedWorld(TILESIZE); + for(int x = screenborder->getTopLeftTile().x - 1; x <= screenborder->getBottomRightTile().x + 1; x++) { + for (int y = screenborder->getTopLeftTile().y - 1; y <= screenborder->getBottomRightTile().y + 1; y++) { +@@ -481,20 +484,17 @@ void Game::drawScreen() + SDL_Rect mini = {0, 0, 1, 1}; + SDL_Rect drawLoc = {drawLocation.x, drawLocation.y, 0, 0}; + +- SDL_Surface** hiddenSurf = pGFXManager->getObjPic(ObjPic_Terrain_Hidden); + SDL_Surface* fogSurf = pGFXManager->getTransparent40Surface(); + +- SDL_LockSurface(hiddenSurf[currentZoomlevel]); + for(int i=0;i<zoomedTileSize; i++) { + for(int j=0;j<zoomedTileSize; j++) { +- if(getPixel(hiddenSurf[currentZoomlevel],source.x+i,source.y+j) == 12) { ++ if(getPixel(hiddenFogSurf[currentZoomlevel],source.x+i,source.y+j) == 12) { + drawLoc.x = drawLocation.x + i; + drawLoc.y = drawLocation.y + j; + SDL_BlitSurface(fogSurf,&mini,screen,&drawLoc); + } + } } +- SDL_UnlockSurface(hiddenSurf[currentZoomlevel]); } - } -- -- pInterface->updateObjectInterface(); - } - - selectionMode = false; -@@ -2039,7 +2037,6 @@ void Game::handleKeyInput(SDL_KeyboardEvent& keyboardE - currentGame->selectionChanged(); - currentCursorMode = CursorMode_Normal; - } -- pInterface->updateObjectInterface(); - } break; - - case SDLK_1: -@@ -2092,8 +2089,6 @@ void Game::handleKeyInput(SDL_KeyboardEvent& keyboardE - currentGame->selectionChanged(); - } - -- pInterface->updateObjectInterface(); -- - if(bEverythingWasSelected && (groupList.empty() == false)) { - // we center around the newly selected units/structures - screenborder->setNewScreenCenter(averagePosition*TILESIZE); -@@ -2216,6 +2211,25 @@ void Game::handleKeyInput(SDL_KeyboardEvent& keyboardE - } - } break; - -+ case SDLK_h: { -+ // select next construction yard -+ std::set<Uint32> itemIDs; -+ itemIDs.insert(Structure_ConstructionYard); -+ selectNextStructureOfType(itemIDs); -+ } break; -+ -+ case SDLK_f: { -+ // select next factory -+ std::set<Uint32> itemIDs; -+ itemIDs.insert(Structure_Barracks); -+ itemIDs.insert(Structure_WOR); -+ itemIDs.insert(Structure_LightFactory); -+ itemIDs.insert(Structure_HeavyFactory); -+ itemIDs.insert(Structure_HighTechFactory); -+ itemIDs.insert(Structure_StarPort); -+ selectNextStructureOfType(itemIDs); -+ } break; -+ - case SDLK_p: { - if(SDL_GetModState() & KMOD_CTRL) { - // fall through to SDLK_PRINT -@@ -2504,5 +2518,56 @@ bool Game::handleSelectedObjectsActionClick(int xPos, - return true; - } else { - return false; -+ } -+} -+ -+void Game::selectNextStructureOfType(const std::set<Uint32>& itemIDs) { -+ bool bSelectNext = true; -+ -+ if(selectedList.size() == 1) { -+ ObjectBase* pObject = getObjectManager().getObject(*selectedList.begin()); -+ if((pObject != NULL) && (itemIDs.count(pObject->getItemID()) == 1)) { -+ bSelectNext = false; -+ } -+ } -+ -+ StructureBase* pStructure2Select = NULL; -+ -+ for(RobustList<StructureBase*>::const_iterator iter = structureList.begin(); iter != structureList.end(); ++iter) { -+ StructureBase* pStructure = *iter; -+ -+ if(bSelectNext) { -+ if( (itemIDs.count(pStructure->getItemID()) == 1) && (pStructure->getOwner() == pLocalHouse) ) { -+ pStructure2Select = pStructure; -+ break; -+ } -+ } else { -+ if(selectedList.size() == 1 && pStructure->isSelected()) { -+ bSelectNext = true; -+ } -+ } -+ } -+ -+ if(pStructure2Select == NULL) { -+ // start over at the beginning -+ for(RobustList<StructureBase*>::const_iterator iter = structureList.begin(); iter != structureList.end(); ++iter) { -+ StructureBase* pStructure = *iter; -+ if( (itemIDs.count(pStructure->getItemID()) == 1) && (pStructure->getOwner() == pLocalHouse) && !pStructure->isSelected() ) { -+ pStructure2Select = pStructure; -+ break; -+ } -+ } -+ } -+ -+ if(pStructure2Select != NULL) { -+ unselectAll(selectedList); -+ selectedList.clear(); -+ -+ pStructure2Select->setSelected(true); -+ selectedList.insert(pStructure2Select->getObjectID()); -+ currentGame->selectionChanged(); -+ -+ // we center around the newly selected construction yard -+ screenborder->setNewScreenCenter(pStructure2Select->getLocation()*TILESIZE); - } - } + } + } else { +@@ -516,6 +516,7 @@ void Game::drawScreen() + } + } + } ++ SDL_UnlockSurface(hiddenFogSurf[currentZoomlevel]); + } + + /////////////draw placement position -- Best Regards Edd Barrett http://www.theunixzoo.co.uk
