- Timestamp:
- Mar 29, 2005, 11:50:51 AM (20 years ago)
- Location:
- orxonox/trunk/src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/trunk/src/lib/graphics/importer/texture.cc
r3655 r3660 23 23 24 24 #include "graphics_engine.h" 25 26 // headers only for PathList27 #include <unistd.h>28 #include <sys/types.h>29 #include <sys/stat.h>30 #include <stdlib.h>31 #include <fstream>32 33 /**34 \brief creates a ned PathList.35 36 It is a good idea to use this as an initial List,37 because if you give on a name the Path will not be checked for its existence.38 */39 PathList::PathList()40 {41 this->pathName = NULL;42 this->next = NULL;43 }44 45 /**46 \brief Creates a new PathList with a Name.47 \param pName the Name of The Path.48 49 This function just adds the Path without checking if it exists.50 */51 PathList::PathList(char* pName)52 {53 this->pathName = new char [strlen(pName)+1];54 strcpy (this->pathName, pName);55 this->next = NULL;56 }57 58 /**59 \brief destroys a PathList60 61 It does this by deleting the Name and then delete its preceding PathList.62 */63 PathList::~PathList()64 {65 if (this->pathName)66 delete []this->pathName;67 if (this->next)68 delete this->next;69 }70 71 PathList* PathList::firstPath = NULL;72 73 /**74 \returns A Pointer to the first Path of the Pathlist75 */76 PathList* PathList::getInstance(void)77 {78 if (firstPath)79 return firstPath;80 firstPath = new PathList();81 }82 /**83 \brief Adds a new Pathlist Element.84 \param pName85 86 Adding a Path automatically checks if the Path exists,87 and if it does not it will not add it to the List.88 */89 void PathList::addPath (char* pName)90 {91 if (pName[0] == '\0')92 {93 PRINTF(2)("not Adding empty Path to the List.\n");94 return;95 }96 char* tmpPName = new char[strlen(pName)];97 strncpy(tmpPName, pName, strlen(pName)-1);98 tmpPName[strlen(pName)-1] = '\0';99 if (access (tmpPName, F_OK) == 0)100 {101 struct stat status;102 stat(tmpPName, &status);103 if (status.st_mode & S_IFDIR)104 {105 PRINTF(4)("Adding Path %s to the PathList.\n", pName);106 PathList* tmpPathList = this;107 while (tmpPathList->next)108 tmpPathList = tmpPathList->next;109 tmpPathList->next = new PathList(pName);110 }111 else112 PRINTF(2)("You tried to add non-folder %s to a PathList.\n", tmpPName);113 }114 else115 PRINTF(2)("You tried to add non-existing folder %s to a PathList.\n", tmpPName);116 delete []tmpPName;117 }118 119 120 25 121 26 /** … … 154 59 if (this->texture) 155 60 glDeleteTextures(1, &this->texture); 156 }157 158 /**159 \brief Searches for a Texture inside one of the defined Paths160 \param texName The name of the texture o search for.161 \returns pathName+texName if texName was found in the pathList. NULL if the Texture is not found.162 */163 char* Texture::searchTextureInPaths(const char* texName) const164 {165 char* tmpName = NULL;166 PathList* pList = PathList::getInstance();167 while (pList)168 {169 if (pList->pathName)170 {171 tmpName = new char [strlen(pList->pathName)+strlen(texName)+1];172 strcpy(tmpName, pList->pathName);173 }174 else175 {176 tmpName = new char [strlen(texName)+1];177 tmpName[0]='\0';178 }179 strcat(tmpName, texName);180 if (access (tmpName, F_OK) == 0)181 return tmpName;182 183 if (tmpName)184 delete []tmpName;185 tmpName = NULL;186 pList = pList->next;187 }188 return NULL;189 61 } 190 62 … … 231 103 if (GraphicsEngine::texturesEnabled) 232 104 { 233 char* imgNameWithPath = searchTextureInPaths(imageName); 234 if (imgNameWithPath) 235 { 236 this->map=IMG_Load(imgNameWithPath); 105 if (imageName) 106 { 107 this->map=IMG_Load(imageName); 237 108 if(!map) 238 109 { … … 249 120 pImage->format = GL_RGBA; 250 121 251 if( !IMG_isPNG(SDL_RWFromFile(im gNameWithPath, "rb")) && !IMG_isJPG(SDL_RWFromFile(imgNameWithPath, "rb")))122 if( !IMG_isPNG(SDL_RWFromFile(imageName, "rb")) && !IMG_isJPG(SDL_RWFromFile(imageName, "rb"))) 252 123 for (int i=0;i<map->h * map->w *3;i+=3) 253 124 { … … 268 139 else 269 140 { 270 PRINTF(2)("Image not Found: %s\n", im gNameWithPath);141 PRINTF(2)("Image not Found: %s\n", imageName); 271 142 return false; 272 143 } … … 285 156 if (GraphicsEngine::texturesEnabled) 286 157 { 287 char* imgNameWithPath = searchTextureInPaths(imageName); 288 if (imgNameWithPath) 289 { 290 if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".bmp", 4)) 158 if (imageName) 159 { 160 if (!strncmp(imageName+strlen(imageName)-4, ".bmp", 4)) 291 161 { 292 162 PRINTF(4)("Requested bmp-image. Trying to Import.\n"); 293 return this->loadBMP(im gNameWithPath);163 return this->loadBMP(imageName); 294 164 } 295 165 296 else if (!strncmp(im gNameWithPath+strlen(imgNameWithPath)-4, ".jpg", 4) || !strncmp(imgNameWithPath+strlen(imgNameWithPath)-5, ".jpg", 5))166 else if (!strncmp(imageName+strlen(imageName)-4, ".jpg", 4) || !strncmp(imageName+strlen(imageName)-5, ".jpg", 5)) 297 167 { 298 168 PRINTF(4)("Requested jpeg-image. Trying to Import\n"); 299 return this->loadJPG(im gNameWithPath);300 } 301 else if (!strncmp(im gNameWithPath+strlen(imgNameWithPath)-4, ".tga", 4))169 return this->loadJPG(imageName); 170 } 171 else if (!strncmp(imageName+strlen(imageName)-4, ".tga", 4)) 302 172 { 303 173 PRINTF(4)("Requested tga-image. Trying to Import\n"); 304 return this->loadTGA(im gNameWithPath);305 } 306 else if (!strncmp(im gNameWithPath+strlen(imgNameWithPath)-4, ".png", 4))174 return this->loadTGA(imageName); 175 } 176 else if (!strncmp(imageName+strlen(imageName)-4, ".png", 4)) 307 177 { 308 178 PRINTF(4)("Requested png-image. Trying to Import\n"); 309 return this->loadPNG(im gNameWithPath);179 return this->loadPNG(imageName); 310 180 } 311 181 else 312 182 { 313 PRINTF(2)("Requested Image was not recognized in its type. (Maybe a type-Cast-error.)\n FileName: %s", im gNameWithPath);183 PRINTF(2)("Requested Image was not recognized in its type. (Maybe a type-Cast-error.)\n FileName: %s", imageName); 314 184 return false; 315 185 } … … 317 187 else 318 188 { 319 PRINTF(2)("Image not Found: %s\n", im gNameWithPath);189 PRINTF(2)("Image not Found: %s\n", imageName); 320 190 return false; 321 191 } -
orxonox/trunk/src/lib/graphics/importer/texture.h
r3655 r3660 27 27 #endif /* HAVE_PNG_H */ 28 28 #endif /* HAVE_SDL_SDL_IMAGE_H */ 29 30 31 32 //! Class to handle lists of paths.33 /**34 \todo Ability to return Paths by itself.35 36 It is simple to use, and good, for all PathList you want.37 just create a new Pathlist, and add Paths.38 */39 class PathList40 {41 private:42 PathList();43 static PathList* firstPath; //!< A static Pointer to the first PathList in the List.44 public:45 PathList(char* pName);46 ~PathList();47 static PathList* getInstance(void);48 49 void addPath (char* pName);50 char* pathName; //!< The Name of the current Path.51 PathList* next; //!< Pointer to the next Pathlist.52 };53 29 54 30 //! A Class, that reads in Textures from different fileformats. -
orxonox/trunk/src/lib/util/resource_manager.cc
r3658 r3660 43 43 } 44 44 45 /** 46 \returns the Instance to this ResourceManager 47 */ 45 48 ResourceManager* ResourceManager::getInstance(void) 46 49 { … … 60 63 61 64 /** 62 \brief standard de constructor65 \brief standard destructor 63 66 */ 64 67 ResourceManager::~ResourceManager (void) 65 68 { 66 69 // deleting the Resources-List 70 unloadAllByPriority(RP_GAME); 67 71 delete resourceList; 68 72 resourceList = NULL; 73 // deleting the Directorie Lists 74 char* tmpDir = imageDirs->enumerate(); 75 while(tmpDir) 76 { 77 delete []tmpDir; 78 tmpDir = imageDirs->nextElement(); 79 } 80 81 delete imageDirs; 82 imageDirs = NULL; 69 83 ResourceManager::singletonRef = NULL; 70 84 } … … 87 101 } 88 102 103 /** 104 \brief adds a new Path for Images 105 \param imageDir The path to insert 106 \returns true, if the Path was well and injected (or already existent within the list) 107 false otherwise 108 */ 89 109 bool ResourceManager::addImageDir(char* imageDir) 90 110 { 111 // check if the param is a Directory 91 112 if (isDir(imageDir)) 92 113 { 93 char* tmpDir = new char[strlen(imageDir)+1]; 114 // check if the Directory has been added before 115 char* tmpDir = imageDirs->enumerate(); 116 while(tmpDir) 117 { 118 if (!strcmp(tmpDir, imageDir)) 119 { 120 PRINTF(4)("Path %s already loaded\n", imageDir); 121 return true; 122 } 123 tmpDir = imageDirs->nextElement(); 124 } 125 // adding the directory to the List 126 tmpDir = new char[strlen(imageDir)+1]; 94 127 strcpy(tmpDir, imageDir); 95 128 imageDirs->add(tmpDir); 129 return true; 96 130 } 97 131 else 98 132 { 99 133 PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", dataDir); 134 return false; 100 135 } 101 136 } … … 104 139 \brief loads resources 105 140 \param fileName The fileName of the resource to load 141 \param prio The ResourcePriority of this resource (will only be increased) 106 142 \returns a pointer to a desired Resource. 107 143 */ 108 void* ResourceManager::load(const char* fileName )144 void* ResourceManager::load(const char* fileName, ResourcePriority prio) 109 145 { 110 146 ResourceType tmpType; … … 126 162 tmpType = IMAGE; 127 163 128 return ResourceManager::load(fileName, tmpType );164 return ResourceManager::load(fileName, tmpType, prio); 129 165 } 130 166 … … 133 169 \param fileName The fileName of the resource to load 134 170 \param type The Type of Resource to load (\see ResourceType) 171 \param prio The ResourcePriority of this resource (will only be increased) 135 172 \returns a pointer to a desired Resource. 136 173 */ 137 void* ResourceManager::load(const char* fileName, ResourceType type )174 void* ResourceManager::load(const char* fileName, ResourceType type, ResourcePriority prio) 138 175 { 139 176 // searching if the resource was loaded before. 140 177 Resource* tmpResource = ResourceManager::locateResourceByName(fileName); 141 char* tmpDir;142 178 if (!tmpResource) // if the resource was not loaded before. 143 179 { 180 char* tmpDir; 144 181 // Setting up the new Resource 145 182 tmpResource = new Resource; 146 183 tmpResource->count = 1; 147 184 tmpResource->type = type; 185 tmpResource->prio = prio; 148 186 tmpResource->name = new char[strlen(fileName)+1]; 149 187 strcpy(tmpResource->name, fileName); … … 212 250 resourceList->add(tmpResource); 213 251 delete []fullName; 214 215 252 } 216 253 else 217 254 { 218 255 tmpResource->count++; 256 if(tmpResource->prio < prio) 257 tmpResource->prio = prio; 219 258 } 220 259 … … 228 267 229 268 */ 230 bool ResourceManager::unload(void* pointer )269 bool ResourceManager::unload(void* pointer, ResourcePriority prio) 231 270 { 232 271 // if pointer is existent. and only one resource of this type exists. 233 Resource* tmpResource = 272 Resource* tmpResource =ResourceManager::locateResourceByPointer(pointer); 234 273 if (!tmpResource) 235 274 { … … 237 276 return false; 238 277 } 239 tmpResource->count--; 240 if (tmpResource->count <= 0) 241 { 242 // deleting the Resource 243 switch(tmpResource->type) 278 else 279 unload(tmpResource, prio); 280 } 281 282 bool ResourceManager::unload(Resource* resource, ResourcePriority prio) 283 { 284 resource->count--; 285 if (resource->prio <= prio) 286 { 287 if (resource->count <= 0) 244 288 { 245 case OBJ: 246 case PRIM: 247 delete (Model*)tmpResource->pointer; 248 break; 249 case IMAGE: 250 delete (Texture*)tmpResource->pointer; 251 break; 252 default: 253 PRINTF(1)("NOT YET IMPLEMENTED FIX FIX\n"); 254 return false; 255 break; 289 // deleting the Resource 290 switch(resource->type) 291 { 292 case OBJ: 293 case PRIM: 294 delete (Model*)resource->pointer; 295 break; 296 case IMAGE: 297 delete (Texture*)resource->pointer; 298 break; 299 default: 300 PRINTF(1)("NOT YET IMPLEMENTED !!FIX FIX!!\n"); 301 return false; 302 break; 303 } 304 // deleting the List Entry: 305 PRINTF(4)("Resource %s safely removed.\n", resource->name); 306 delete []resource->name; 307 resourceList->remove(resource); 256 308 } 257 // deleting the List Entry: 258 PRINTF(4)("Resource %s Safely removed.\n", tmpResource->name); 259 delete []tmpResource->name; 260 resourceList->remove(tmpResource); 261 } 262 else 263 PRINTF(4)("Resource not removed, because there are still %d References to it.\n", tmpResource->count); 309 else 310 PRINTF(4)("Resource %s not removed, because there are still %d References to it.\n", resource->name, resource->count); 311 } 312 else 313 PRINTF(4)("not deleting resource %s because DeleteLevel to high\n", resource->name); 264 314 return true; 315 } 316 317 318 /** 319 \brief unloads all alocated Memory of Resources with a pririty lower than prio 320 \param prio The priority to delete 321 */ 322 bool ResourceManager::unloadAllByPriority(ResourcePriority prio) 323 { 324 Resource* enumRes = resourceList->enumerate(); 325 while (enumRes) 326 { 327 if (enumRes->prio <= prio) 328 unload(enumRes, prio); 329 enumRes = resourceList->nextElement(); 330 } 265 331 } 266 332 -
orxonox/trunk/src/lib/util/resource_manager.h
r3658 r3660 17 17 //template<class T> class tList; 18 18 #include "list.h" //! \todo do this by forward definition (ask Patrick) 19 20 //! An eumerator for different fileTypes the resourceManager supports \todo WAV, MP3, OGG support 19 21 enum ResourceType {OBJ, PRIM, WAV, MP3, OGG, IMAGE}; 22 //! An enumerator for different UNLOAD-types. 23 /** 24 RP_NO: will be unloaded on request 25 RP_LEVEL: will be unloaded at the end of a Level 26 RP_CAMPAIGN: will be unloaded at the end of a Campaign 27 RP_GAME: will be unloaded at the end of the whole Game (when closing orxonox) 28 */ 29 enum ResourcePriority {RP_NO = 0, RP_LEVEL = 1, RP_CAMPAIGN = 2, RP_GAME = 3}; 20 30 31 //! A Struct that keeps track about A resource its name its Type, and so on 21 32 struct Resource 22 33 { … … 25 36 char* name; //!< Name of the Resource. 26 37 ResourceType type; //!< ResourceType of this Resource. 38 ResourcePriority prio; //!< The Priority of this resource. (This will only be increased) 27 39 int count; //!< How many times this Resource has been loaded. 28 40 }; … … 46 58 static bool setDataDir(char* dataDir); 47 59 static bool addImageDir(char* imageDir); 48 static void* load(const char* fileName); 49 static void* load(const char* fileName, ResourceType type); 50 static bool unload(void* pointer); 60 static void* load(const char* fileName, ResourcePriority prio = RP_NO); 61 static void* load(const char* fileName, ResourceType type, ResourcePriority prio = RP_NO); 62 static bool unload(void* pointer, ResourcePriority prio = RP_NO); 63 static bool unload(Resource* resource, ResourcePriority = RP_NO); 64 static bool unloadAllByPriority(ResourcePriority prio); 51 65 52 66 private: … … 61 75 static Resource* locateResourceByPointer(const void* pointer); 62 76 63 64 77 static bool isDir(const char* directory); 65 78 static bool isFile(const char* directory); -
orxonox/trunk/src/orxonox.cc
r3658 r3660 22 22 main-programmer: Patrick Boenzli 23 23 co-programmer: Christian Meyer 24 co-programmer: Benjamin Grauer: injected ResourceManager/GraphicsEngine 24 25 */ 25 26 … … 56 57 if( resources != NULL) delete resources; 57 58 delete GraphicsEngine::getInstance(); // deleting the Graphics 59 delete ResourceManager::getInstance(); // deletes the Resource Manager 58 60 } 59 61 … … 329 331 orx->start(); 330 332 331 // delete orx;333 // delete orx; 332 334 333 335 } -
orxonox/trunk/src/orxonox.h
r3655 r3660 26 26 static Orxonox* singletonRef; 27 27 Orxonox (); 28 virtual ~Orxonox ();29 28 30 29 char configfilename[256]; //!< Filename of the configuration-file. … … 59 58 public: 60 59 static Orxonox* getInstance (); 60 virtual ~Orxonox (); 61 61 62 void start(); 62 63 void quitGame(); -
orxonox/trunk/src/story_entities/world.cc
r3654 r3660 145 145 cn->unbind(this->localPlayer); 146 146 cn->reset(); 147 148 ResourceManager::unloadAllByPriority(RP_LEVEL); 147 149 148 150 delete WorldInterface::getInstance(); -
orxonox/trunk/src/world_entities/player.cc
r3658 r3660 45 45 the player.cc for debug also 46 46 */ 47 this->model = (Model*)ResourceManager::load("models/reaplow.obj", OBJ );47 this->model = (Model*)ResourceManager::load("models/reaplow.obj", OBJ, RP_CAMPAIGN); 48 48 travelSpeed = 15.0; 49 49 velocity = new Vector();
Note: See TracChangeset
for help on using the changeset viewer.